← 返回首页
HashMap 底层原理是什么?JDK 1.7 和 1.8 的 ConcurrentHashMap 有什么区别?
HashMap 底层是数组 + 链表 + 红黑树。通过 key 的 hash 值定位数组下标,如果发生 hash 冲突,就把节点挂到同一个桶里。
JDK 1.8 后,当链表长度超过阈值且数组容量足够大时,会把链表转成红黑树,降低极端冲突下的查询复杂度。
ConcurrentHashMap 在 JDK 1.7 使用 Segment 分段锁,每个 Segment 内部类似一个小 HashMap,锁粒度是 Segment。JDK 1.8 去掉 Segment,改为数组 + 链表/红黑树 + CAS + synchronized,锁粒度降到桶级别,并发性能更好,初始化和扩容也用了更复杂的协作机制。