首页 新闻 会员 周边 捐助

jdk1.8后的hash map为何不是数组加红黑树,而需要加上链表

0
悬赏园豆:5 [待解决问题]

jdk1.8后的hash map为何不是数组加红黑树,而需要加上链表

SeanTandol的主页 SeanTandol | 初学一级 | 园豆:197
提问于:2019-01-16 10:27
< >
分享
所有回答(3)
0
ycyzharry | 园豆:25683 (高人七级) | 2019-01-16 10:30

等于没说,,,

支持(0) 反对(0) SeanTandol | 园豆:197 (初学一级) | 2019-01-16 10:46
0

jdk1.8之前是使用数组加链表的
jdk1.8 后,他就默认如果链表数据超过8个,就会使用红黑树的方式去装载,你可以看源码,能看到的

Ajack | 园豆:202 (菜鸟二级) | 2019-01-30 10:59
1

HashMap在JDK1.8及以后的版本中引入了红黑树结构,若桶中链表元素个数大于等于8时,链表转换成树结构;若桶中链表元素个数小于等于6时,树结构还原成链表。因为红黑树的平均查找长度是log(n),长度为8的时候,平均查找长度为3,如果继续使用链表,平均查找长度为8/2=4,这才有转换为树的必要。链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。

还有选择6和8,中间有个差值7可以有效防止链表和树频繁转换。假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。

少年攻城狮 | 园豆:208 (菜鸟二级) | 2019-04-29 18:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册