1.JDK8HashMap数据结构
数组 + 单向链表 + 红黑树
2.HashMap特点(是否有序,是否可为null,是否可重复,
是否线程安全,初始容量多少,负载因子的含义,扩容多
少)
无序 可以为null 键不能重复 值可以重复 线程不安全 初始数组长度为16 负载因子
0.75 表示数组的使用率达到75% 就扩容 扩容为原数组长度的2倍
3.HashMap和Hashtable的区别
HashMap初始化长度为0的数组 第一次添加元素数组初始化为16
Hashtable初始化长度为11的数组
HashMap线程不安全 Hashtable线程安全
HashMap扩容2倍 Hashtable扩容2倍 + 1
4.Properties类,推荐使用什么方法存放数据,不推荐使
用什么方法,为什么
setProperty() 不推荐使用put 或者 putAll 方法 因为这两个方法允许添加非String数
据
5.遍历HashMap的几种方式
1.获取所有的键 keySet()
2.获取所有的值 values()
3.获取所有建制对的组合 entrySet()
以上三种的迭代器形式
6.说出你所知道的集合体系中的接口和实现类分别都有哪
些
Collection
List ArrayList LinkedList Vector
Set HashSet LinkedHashSet Treeset
Map HashMap LinkedHashMap TreeMap Hashtable Properties
7.HashMap添加元素的过程,什么时候扩容,什么时候转
换红黑树,什么时候取消转换红黑树?
使用hash值对数组长度-1 进行与运算 得到存在数组中的下标
如果此位置没有数据 则直接存放
如果此位置有数据
比较是否为完全相同的键
如果键完全相同 则直接覆盖
如果键不同 向下添加 判断为树节点 还是链表节点 分别以不同的方式添加
数组的使用率达到75%
当链表的长度大于8 并且数组的长度大于64转红黑树
当链表的长度小于6
8.TreeMap存储自定义的数据类型 有什么要求
必须实现Comparable接口 或者 编写 实现Comparator接口的比较器 来定义比较规则
9.HashSet去除重复元素的依据是什么?
两个对象equals比较为true hashCode相同 则认为是重复的对象
10.Comparable和Comparator接口的区别?
Comparable接口属于自然排序 因为是直接在类中书写
Comparator属于非自然排序 因为是单独书写排序类