fundamentals
fundamentals/collection-internals/index.md
medium
fundamentals-collection-internals-index
集合源码原理服务于实践决策 — HashMap 初始容量、并发 Map 选型、红黑树与负载因子。Use when 预估 HashMap 容量 / 选并发 Map / 调负载因子或纠结链表转树时。
子项索引
| 子项 | 一句话 |
|---|---|
| collection-internals-hashmap-sizing skill | HashMap 为何要预设初始容量 — 默认 16 装大量元素会反复扩容 rehash,已知大小时 new HashMap(expectedSize/0.75f+1) |
| collection-internals-concurrent-map-choice skill | 并发 Map 三选一原理 — ConcurrentHashMap(CAS+桶级锁)吞吐远高于全表锁的 Collections.synchronizedMap 和已过时的 Hashtable |
| collection-internals-treeify-and-loadfactor skill | HashMap 链表何时转红黑树(链表>8 且数组容量≥64,否则先扩容)与负载因子 0.75 的时间/空间取舍 |
Collection Internals · 子项索引
内功定位:原理 → 实践决策,不是八股背诵。每条都用「源码机制」回答一个「该怎么写代码」的问题。 这里讲为什么这样写;具体用哪个集合实现的选型见
lang/java/collections/,不重复。
按你正在做的事下钻:
| 你在做什么 | 进哪个 |
|---|---|
| new 一个已知大致元素数的 HashMap,想避免它反复扩容 rehash | hashmap-sizing |
| Map 要在多线程间共享读写,在 ConcurrentHashMap / synchronizedMap / Hashtable 之间选 | concurrent-map-choice |
| 纠结负载因子怎么设、链表什么时候转红黑树、为什么有时扩容而不转树 | treeify-and-loadfactor |