JDK7 是数组 + 链表 存储节点数据 Entry,JDK8 是数组 + 链表 + 红黑树存储节点数据Node。
JDK8 当链表长度大于等于8同时 HashMap 中的元素大于等于 64 则转化成红黑树。
JDK7 会先调用 inflateTable() 初始化一个数组,而 1.8 则是直接调用 resize() 扩容。
JDK7 中是采用头插,JDK8 中会将节点插入到链表尾部。
JDK7 中的 hash 函数对哈希值的计算直接使用 key 的 hashCode 值,扰动复杂,而 1.8 中则是采用 key 的 hashCode 异或上 key 的 hashCode 进行无符号右移 16 位的结果,结果更散列,而且扰动简单。