HashMap 的 hash 方法是如何实现的?

71 阅读1分钟

回答

image-20250325154216323

  • 在 JDK 1.8 中,此方法先判断 Key 是否为 null,若为 null 则返回 0;否则,获取 Key 的 hashCode 值h,然后,将h与其右移 16 位后的结果进行异或运算,返回最终结果。
提升效率的技术手段
  1. 使用位运算(&)来代替取模运算(%)

    位运算直接对内存数据进行操作,不需要转换成十进制,处理速度更快。在计算元素在数组中的位置时,通过位运算可以更高效地实现。

  2. 对 hashCode 进行扰动计算

    即通过(h = key.hashCode()) ^ (h >>> 16)将 hashCode 的高位和低位特征组合起来。

    这样做是为了防止不同 hashCode 的高位不同但低位相同导致的哈希冲突,尽量使任何一位的变化都能对最终的哈希结果产生影响,从而降低哈希冲突的概率。