第8题:HashMap在计算元素下标时,为什么要进行二次hash
📚 回答:
-
背景:
HashMap在计算元素的下标时,会先取key的hashCode值,然后进行二次哈希处理,最后与数组长度减1进行按位与运算,得到元素的存储位置下标。 -
原因:
- 目的:二次哈希的目的是让计算出来的哈希值更加均匀分布,从而充分利用数组空间,减少哈希冲突的概率。
- 好处:
- 减少链表长度过长的情况,避免查询效率下降。
- 提高散列效果,使得元素在数组中分布更加均匀,降低冲突率。
-
底层原理:
二次哈希通过对原始hashCode值进行扰动计算(如右移和异或操作),进一步打乱高位和低位的分布,确保即使原始hashCode值分布不均匀,也能生成较为均匀的哈希值。💡 面试官视角:
-
面试官可能会问“如果不做二次hash会怎么样?”答:不做二次hash可能导致哈希值分布不均匀,容易出现大量冲突,形成超长链表,查询效率会显著下降。
-
面试官可能会追问“为什么JDK 1.8仍然保留二次hash?”答:虽然JDK 1.8引入了红黑树来优化链表性能,但减少冲突仍然是关键,二次hash能从源头上提升散列效果,降低链表和红黑树的使用频率。
📌 专栏:大白话说Java面试题 — 01-Java基础篇