2020/7/26学习小结
1、HashMap的加载因子是什么?
答:扩容因子或负载因子,用来判断什么时候进行扩容的,假如加载因子是 0.5,HashMap 的初始化容量是 16,那么当 HashMap 中有 16*0.5=8 个元素时,HashMap 就会进行扩容。
2、加载因子为什么是0.75?
答:
- 当加载因子设置比较大的时候,扩容的门槛就被提高了,扩容发生的频率比较低,占用的空间会比较小,但此时发生 Hash 冲突的几率就会提升,因此需要更复杂的数据结构来存储元素,这样对元素的操作时间就会增加,运行效率也会因此降低。
- 当加载因子值比较小的时候,扩容的门槛会比较低,因此会占用更多的空间,此时元素的存储就比较稀疏,发生哈希冲突的可能性就比较小,因此操作性能会比较高。
- 所以,取了一个 0.5 到 1.0 的平均数 0.75 作为加载因子。
3、HashMap 源码中有哪些重要的方法?
答:查询、新增和数据扩容。
4、新增方法的执行过程(转)
5、关于HashMap 死循环
答:
- 发生死循环的原因是 JDK 1.7 链表插入方式为首部倒序插入,这个问题在 JDK 1.8 得到了改善,变成了尾部正序插入。
- 线程不安全情况下,用HashMap。多线程中考虑线程安全的话,就用ConcurrentHashMap。
小结:
在 JDK 1.7 时 HashMap 是由数组和链表组成的,而 JDK 1.8 则新增了红黑树结构,当链表长度达到 8 并且容器达到 64 时会转换为红黑树存储,以提升元素的操作性能。