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