HashMap和ConcurrentHashMap的put方法详解
结构简述
HashMap和ConcurrentHashMap的结构都是一样的,jdk1.8之后都是 数组+链表+红黑树,链表长度超过8之后转红黑树。
计算
节点为6个的时候,链表的平均查询时间:(1+2+3+4+5+6)/ 6 = 3.5,红黑树的平均查询时间 (1+22+33)/6=2.3
节点为7个的时候,链表的平均查询时间:(1+2+3+4+5+6+7)/ 7 = 4,红黑树的平均查询时间 (1+22+34)/7=2.4
节点为8个的时候,链表的平均查询时间:(1+2+3+4+5+6+7+8)/ 8 = 4.5,红黑树的平均查询时间 (1+22+34+1*4)/8=2.6
链表的时间复杂度为O(n),而树的时间复杂度为O(ln n),上面计算有明显的效率变化,至于为啥选8这个阈值,应该是基于大量数据收集之后比较而定的。