HashMap 完全解析
HashMap 完全解析 1. 基本特点 2. 存储结构 2.1 HashMap 数据底层具体存储的是什么? 2.2 为什么要用单链表的方式? 3. HashMap 的成员变量 4. 确定数组索引位置的 hash 算法 4.1 为什么要采用这种算法呢? 番外: 为什么用 & 操作呢? 为什么可以使用位运算(&)来实现取模运算(%)呢 5. 存储数据的 put 方法 6. HashMap 的扩容机制 7. 为什么HashMap线程不安全? 7.1 多线程 put,导致的数据不一致。 7.2 resize 造成的无限循环 参考 1. 基本特点 HashMap 是 java 中用于映射(键值对)处理的数据类型。基于哈希表的 Map 接口的实现。最多只允许一条记录的键为 null,允许多条记录的值为 null。 HashMap 不保证映射的顺序。特别是, 它不能保证顺序会随着时间的推移保持恒定 。 HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度 O(1)。 2. 存储结构 从结构实现来讲,HashMap 是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的。 [图片上传失败…(image-7d8358-1576498907545)] 2.1 HashMap 数据底层具体存储的是什么? 通过查看 HashMap 的源码