学习了HashMap JDK7和JDK8中的实现,现在让我们来总结下两者的区别.
JDK7 HashMap
// 数据结构
- 基于数组+链表。
- 元素存储在 Entry 对象中,使用链表解决哈希冲突
// 扩容条件:
- 在数组长度达到阈值且当前位置不为空时触发扩容。
// 扩容元素转移
- 扩容时,单个链表中的元素一个个搬移到新的数组上。最终链表元素顺序换发生改变.
// 插入链表新节点
头插法
JDK8 HashMap
// 数据结构
- 数组+链表+红黑树。
- 使用 Node 作为链表的节点,对于长度过长的链表采用红黑树(TreeNode)优化。
// 扩容条件
- 在数组长度达到阈值时触发扩容。
// 扩容元素转移
扩容时会根据原始链表或树节点,整合成 1 到 2 个新的链表或树,将其放置到新数组对应的索引位置上。
// 插入链表新节点
尾插法