深入理解 Java 中的 HashMap 底层原理

摘要:​ 探讨 HashMap 的数据结构、哈希冲突的解决方案以及在 JDK 1.8 中的优化。

HashMap 是 Java 后端和 Android 开发中最高频使用的数据结构之一。今天在阅读源码时,对其底层实现有了更深的理解。

数据结构

JDK 1.8 中,HashMap 采用 数组 + 链表 + 红黑树​ 的结构。

  • 数组 (Node<K,V>[] table):用于快速定位下标。
  • 链表:解决哈希冲突,当同一位置元素过多时形成链表。
  • 红黑树:当链表长度大于阈值(默认为 8)且数组容量大于 64 时,链表转为红黑树,将查找时间复杂度从 O(n) 降至 O(log n)。

Hash 算法

javajavastatic final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

这段代码将高 16 位与低 16 位进行异或运算,增加了低位随机性,减少了 Hash 冲突的概率。

类似文章