HashMap详解
HashMap 深度解析(基于 JDK 8)
HashMap 是 Java 集合框架中使用最广泛的 Map 实现类,基于哈希表(数组 + 链表 + 红黑树)实现,支持高效的键值对存储与查询。其设计兼顾了时间和空间效率,是单线程环境下键值对存储的首选。本文将从底层结构、核心源码、工作机制及并发问题等方面,全面剖析 HashMap 的实现原理。
HashMap 核心特性与继承关系
核心特性
- 键唯一性:键(key)不可重复,重复插入会覆盖原值。
- 允许 null:键和值均可为
null(键最多 1 个null,值可多个)。 - 无序性:存储顺序与插入顺序无关(由键的哈希值决定)。
- 动态扩容:容量不足时自动扩容,默认扩容为原容量的 2 倍。
- 非线程安全:多线程并发修改可能导致数据不一致(如死循环、数据覆盖)。
继承关系

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
- 继承
AbstractMap:复用Map接口的基础实现(如entrySet、keySet等)。 - 实现
Map:遵循键值对集合的规范。 - 实现
Cloneable:支持浅拷贝(仅复制结构,不复制元素对象)。 - 实现
Serializable:支持序列化,通过writeObject和readObject自定义序列化逻辑。
底层数据结构:数组 + 链表 + 红黑树
HashMap 的底层结构是哈希表,JDK 8 中采用 “数组 + 链表 + 红黑树” 的组合结构,平衡了哈希冲突处理与查询效率:
