目录
1. 底层实现结构不同
JDK1.7:数组+链表
JDK1.8:数组+链表+红黑树
2. 扰动函数不同
JDK1.7:九次扰动,四次位运算+五次异或运算
扫描二维码关注公众号,回复:
12653567 查看本文章

JDK1.8:两次扰动,1次位运算+1次异或运算
3. resize()函数功能不同
JDK1.7:resize()为扩容,inflateTable()为初始化底层数组
JDK1.8:resize()为初始化+扩容
4. 扩容的判断时机不同
JDK1.7:数据插入前
JDK1.8:数据插入后
5. 扩容的判断条件不同
JDK1.7:超过阈值且发生hash碰撞则进行扩容
JDK1.8:超过阈值或链表转为红黑树且数组元素小于64
6. 扩容后数据存储位置计算方式不同
JDK1.7:重新计算元素存储位置
JDK1.8:扩容后的位置 = 原位置/原位置+旧容量
7. 新增元素插入位置不同
JDK1.7:头插法
JDK1.8:尾插法