HoRain云--Java 集合源码剖析:HashMap 从 put 到扩容的完整流程
2026/9/14 21:49:10 网站建设 项目流程

1. 数据结构

JDK 8 后,HashMap 使用数组 + 链表 + 红黑树。

2. hash 扰动

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

让高位参与运算,减少哈希冲突。

3. put 流程

  • 计算 hash。

  • 定位数组下标。

  • 如果桶为空,直接插入。

  • 如果冲突,遍历链表或红黑树。

  • 链表长度达到 8 且容量达到 64,转为红黑树。

4. 扩容

默认容量 16,负载因子 0.75。扩容时容量翻倍,重新分配节点。

5. 线程安全

HashMap 线程不安全,多线程扩容可能导致数据丢失或死循环。并发场景使用ConcurrentHashMap

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询