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