MIN_TREEIFY_CAPACITY不能理解

来源:10-4 HashMap

MySweeties

2020-03-27

当桶中节点大于TREEIFY_THRESHOLD时,会由链表结构转换为红黑树结构,当桶中节点小于UNTREEIFY_THRESHOLD时会由红黑树结构转换为链表结构,那么MIN_TREEIFY_CAPACITY是个什么含义呢?看了源码和网上博文,得到的是,如果桶中节点大于TREEIFY_THRESHOLD,但是整个哈希表的容量小于MIN_TREEIFY_CAPACITY时,只会扩容而不会变成红黑树,只有当大于了MIN_TREEIFY_CAPACITY并且大于TREEIFY_THRESHOLD才会变成树结构。。。那么之前的大于TREEIFY_THRESHOLD是在干嘛?理解起来总感觉怪怪的,多半是错了!希望老师或者其他有缘人能解答一下,大于TREEIFY_THRESHOLD时,存储的到底是什么?链表还是红黑树?到底什么时候会出现红黑树?

写回答

2回答

海与千巷

2020-03-27

链表长度大于TREEIFY_THRESHOLD且数组长度大于MIN_TREEIFY_CAPACITY,链表转化为红黑树

链表长度大于TREEIFY_THRESHOLD(且数组长度不大于MIN_TREEIFY_CAPACITY),进行扩容,还是链表

3
4
翔仔
回复
noob_programmer
同学好,这样做的目的我理解主要是为了尽可能避免冲突,这是经过长期经验和数学推算总结出来的,小于一定数目的话,扩容会比树化效果要好
2020-05-24
共4条回复

海与千巷

2020-03-27

当执行put方法时,若某一个桶中的链表长度达到TREEIFY_THRESHOLD(8)时,尝试调用树化方法,树化方法中会再次判断数组长度(即桶的数量)是否大于MIN_TREEIFY_CAPACITY(64),大于则将链表变为红黑树,否则不树化(只进行普通扩容,即桶的数量加倍)

1
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程