一、HashMap 与 ConcurrentHashMap
| 维度 | HashMap (JDK8) | ConcurrentHashMap (JDK8) |
|---|---|---|
| 结构 | 数组+链表+红黑树 | 同左 |
| 并发 | 线程不安全 | CAS + synchronized(锁头节点) |
| 扩容 | 单线程 | 多线程协助迁移 |
| size | int | baseCount + CounterCell 分段 |
HashMap 树化条件:链表长度 > 8 且数组容量 ≥ 64。hash 扰动:h ^ (h >>> 16) 降低碰撞。
二、ArrayList vs LinkedList
- ArrayList 随机访问 O(1)、中间插入 O(n);
- LinkedList 头尾增删 O(1)、随机访问 O(n),且额外指针开销;
- 绝大多数场景用 ArrayList。
三、fail-fast
遍历时用非迭代器方式结构性修改集合会抛 ConcurrentModificationException。多线程用 CopyOnWriteArrayList 或并发容器,或用迭代器 remove()。