第5题:HashMap的底层原理是什么
📚 回答:
-
JDK 7 vs JDK 8:
- JDK 7 :
HashMap底层由数组 + 链表实现。 - JDK 8 :
HashMap底层由数组 + 链表 + 红黑树实现。
- JDK 7 :
-
JDK 7 的原理:
- 当多个
key通过哈希计算出不同的索引(index)时,元素按数组方式存储。 - 如果多个
key的哈希值冲突(即索引相同),会引入链表来存储冲突的元素。 - 缺点:当链表越来越长时,查询效率会降低,时间复杂度为O(n)。
- 当多个
-
JDK 8 的改进:
- 在数组和链表的基础上,引入了红黑树。
- 当数组容量 ≥ 64 且链表长度 > 8 时,链表会转换为红黑树,从而提高查询效率。
- 红黑树的时间复杂度为O(log n),比链表的**O(n)**更高效。
💡 面试官视角:
- 面试官可能会问"为什么引入红黑树?"
答:因为链表在冲突严重时查询效率低,而红黑树能显著提升查询性能,尤其是在数据量较大的场景下。 - 面试官可能会追问"为什么链表长度阈值是8?"
答:这是基于概率统计的结果,链表长度达到8的概率较低,但一旦达到说明冲突较多,需要优化为红黑树以提升性能。