jdk1.8前后的HashMap改动

53 阅读1分钟
jdk版本数据结构hash函数匹配数组下标扩容(rehash)hash冲突
<1.8数组+链表对hashCode进行大量扰动处理,针对String类型做了额外处理hashCode按位与数组长度-1(即取低位)遍历数组+链表采用头插入法新数组链表线性存储
>=1.8数组+链表+红黑树取消复杂扰动处理,采用高位16位与低位16位按位与;key==null时对应下标0计算方式未改变;取消了indexFor方法,采用直接表达式按位与运算对不同节点(链表、树节点)作不同的插入方法,其中链表由头插法改为尾插法链表数量超过阈值转换为树结构

<jdk1.8数据结构图

image.png

>=jdk1.8数据结构图

image.png