hashmap 1.7和1.8 的区别
数据结构上:
1.7使用数组+链表+头插法
1.8使用数组+链表+红黑树+尾插法
hash的扰动函数:
1.7 5次异或+4次位运算
1.8 1次异或+1次位运算
扩容机制的实现:
1.7
扩容两倍;
计算原hashmap中的数据在新hashmap中的位置,使用&运算;
设置新的阈值;
放入最新的值。
1.8
异常判断;
扩容两倍;
计算原hashmap中的数据在新hashmap中的位置,位置为原位置或者原位置+原来数组大小,同时放入新加入的值;
设置新的阈值;
查询时间复杂度:
从原来的遍历链表O(n),变成遍历红黑树O(logN)
currenthashmap 1.7和1.8 的区别
数据结构上:
1.7使用数组+链表+segment
1.8使用数组+链表+红黑树+CAS+synchronize
锁的粒度:
1.7是对需要进行数据操作的Segment加锁
1.8为对每个数组元素加锁(Node)
链表转化为红黑树:
定位结点的hash算法简化会带来弊端,Hash冲突加剧,因此在链表节点数量大于8时,会将链表转化为红黑树进行存储。
查询时间复杂度:
从原来的遍历链表O(n),变成遍历红黑树O(logN)
648

被折叠的 条评论
为什么被折叠?



