Jdk1.7到Jdk1.8HashMap 发⽣了什么变化(底层)?
底层数据结构不同:
- 1.7中底层是
数组+链表
- 1.8中底层是
数组+链表+红⿊树
,加红⿊树的⽬的是提⾼HashMap插⼊和 查询整体效率
链表插入还是不同:
- 1.7中链表插⼊使⽤的是
头插法
- 1.8中链表插⼊使⽤的是
尾插法
,因为1.8中插⼊key和value时需要判断链表元素个数
,所以需要遍历链表统计链表元素个数,所以正好就直接使⽤尾插法
扩容策略不同:
- 1.7中是
只要不小于阈值就直接扩容2倍
- 1.8的扩容策略会更优化,键值对数量
大于阈值时会扩容
,且链表长度大于8时,转变为红黑树前会检测hash桶数量不足64时,也会进行扩容
,而且扩容过程中,发现有树节点不足6时,会降为链表