1:hashMap底层结构
数组+链表+红黑树
2:简要看下put方法的执行步骤
1:如果hashMap为初始话,则初始化map,初始容量为16
2:对key求hash值,然后计算下标(数组位置,或者说是桶的位置,或者是bin)
3:如果出现了碰撞(在数组的相同下标),以链表的方式连接到后面
4:如果没有出现碰撞就直接放入桶中
5:如果链表中的节点数大于阈值8个时,就直接转换为红黑树
6:如果树中节点个数小于6个时,那么就会从红黑树转换为链表
7:如果节点已经存在,就直接覆盖
8:如果桶容量达到16*0.75=12这个阈值的时候,数组需要扩容
上边是put方法执行的大概流程,那么下面我们来具体分析
1:为什么需要从链表转换为红黑树?
因为map中的桶的元素初始化是链表保存的,其查找性能是o(n),而树结构能将查找性能提升到o(log(n)),当链表长度很小的时候,及时遍历,速度也非常快,但是当链表长度不断变成时,肯定会对查询性能有一定的影响,所以才需要转换成树,源码如下图
上边的截图的大概