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、新增方法的执行过程(转)

2020/7/26学习小结

 

5、关于HashMap 死循环

答:

  • 发生死循环的原因是 JDK 1.7 链表插入方式为首部倒序插入,这个问题在 JDK 1.8 得到了改善,变成了尾部正序插入。
  • 线程不安全情况下,用HashMap。多线程中考虑线程安全的话,就用ConcurrentHashMap。

 

 

小结:

在 JDK 1.7 时 HashMap 是由数组和链表组成的,而 JDK 1.8 则新增了红黑树结构,当链表长度达到 8 并且容器达到 64 时会转换为红黑树存储,以提升元素的操作性能。