Untitled

1. 底层结构

JDK7 是数组 + 链表 存储节点数据 Entry,JDK8 是数组 + 链表 + 红黑树存储节点数据Node。

JDK8 当链表长度大于等于8同时 HashMap 中的元素大于等于 64 则转化成红黑树。

2. 当哈希表为空时

JDK7 会先调用 inflateTable() 初始化一个数组,而 1.8 则是直接调用 resize() 扩容。

3. Hash 冲突时,插入数据

JDK7 中是采用头插,JDK8 中会将节点插入到链表尾部。

4. hash函数

JDK7 中的 hash 函数对哈希值的计算直接使用 key 的 hashCode 值,扰动复杂,而 1.8 中则是采用 key 的 hashCode 异或上 key 的 hashCode 进行无符号右移 16 位的结果,结果更散列,而且扰动简单。