一、HashMap 结构
JDK 8 中 HashMap = 数组 + 链表 + 红黑树。key 经 hash 扰动后定位桶;桶内链表长度 > 8 且数组容量 ≥ 64 时转红黑树,< 6 退化为链表。
二、核心参数
| 参数 | 默认 | 说明 |
|---|---|---|
| 初始容量 | 16 | 总是 2 的幂 |
| 负载因子 | 0.75 | 容量×因子=扩容阈值 |
| 树化阈值 | 8 | 链表转红黑树 |
三、使用示例
Map<String, Integer> m = new HashMap<>();
m.put("a", 1); m.get("a"); m.containsKey("a");
for (Map.Entry<String,Integer> e : m.entrySet()) { }
要点:key 要正确实现 hashCode 和 equals;多线程用 ConcurrentHashMap,别在并发下用 HashMap(可能死循环/数据损坏)。