回答
- 在 JDK 1.8 中,此方法先判断 Key 是否为 null,若为 null 则返回 0;否则,获取 Key 的 hashCode 值
h,然后,将h与其右移 16 位后的结果进行异或运算,返回最终结果。
提升效率的技术手段
-
使用位运算(&)来代替取模运算(%)
位运算直接对内存数据进行操作,不需要转换成十进制,处理速度更快。在计算元素在数组中的位置时,通过位运算可以更高效地实现。
-
对 hashCode 进行扰动计算:
即通过
(h = key.hashCode()) ^ (h >>> 16)将 hashCode 的高位和低位特征组合起来。这样做是为了防止不同 hashCode 的高位不同但低位相同导致的哈希冲突,尽量使任何一位的变化都能对最终的哈希结果产生影响,从而降低哈希冲突的概率。