JDK 8之前HashMap采用数组+链表的数据结构。
JDK 8及之后HashMap采用数组+链表+红黑树的数据结构。
JDK 8之前的数组+链表:
将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。
JDK 8及之后的数组+链表+红黑树:
当链表长度超过阈值 8 且数组长度超过 64 时,将链表转换为红黑树。
当链表长度小于等于6时红黑树结构还原成链表。(待验证,此时会考虑数组长度的变化吗?)
链表数据插入的区别:
JDK7:使用的是头插入法,扩容后与原位置相反(resize会导致环形链表)
JDK8:使用的尾插法,扩容后位置与原链表相同