admin管理员组

文章数量:1611543

#声明
以下都是自己探索出来的如有不对请多多包涵并请指出
#TREEIFY_THRESHOLD 默认值是8
这个树型阈值在我看了源码之后发现它只是触发尝试树型化的一个条件,当一个桶中的链表大于等于TREEIFY_THRESHOLD-1就会尝试进行树型化
下面是java8的源码

for (int binCount = 0; ; ++binCount) {
                    if ((e = p.next) == null) {
                        p.next = newNode(hash, key, value, null);
                        if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
                            treeifyBin(tab, hash);
                        break;
                    }
                    if (e.hash == hash &&
                        ((k = e.key) == key || (key != null && key.equals(k))))
                        break;
                    p = e;
                }


在调用treeifBin后直接就与最小数容量进行比较,如果小于最小数容量就只进行扩容
源码这个方法上的说明
/**
* Replaces all linked nodes in bin at index for given hash unless
* table is too small, in which case resizes instead.
*/

图中的else if中的条件如果成立就会对当前桶进行树型化(红黑树)
还有虽然我看不懂它的
((n-1)&hash)到底得出个啥东西但我猜应该是会得出当前桶的下标还希望有人能解答

本文标签: 阈值小树树型红黑属性