码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap树化链表treeifyBin

时间:2020-02-11 09:49:05      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:alt   new   set   组织   res   nbsp   示例   ima   oid   

private final void treeifyBin(Node<K,V>[] tab, int index) {
        Node<K,V> b; int n, sc;
        if (tab != null) {
            if ((n = tab.length) < MIN_TREEIFY_CAPACITY)
                tryPresize(n << 1);
            else if ((b = tabAt(tab, index)) != null && b.hash >= 0) {
                synchronized (b) {
                    if (tabAt(tab, index) == b) {
                        TreeNode<K,V> hd = null, tl = null;
                        for (Node<K,V> e = b; e != null; e = e.next) {
                            TreeNode<K,V> p =
                                new TreeNode<K,V>(e.hash, e.key, e.val,
                                                  null, null);
                            if ((p.prev = tl) == null)
                                hd = p;
                            else
                                tl.next = p;
                            tl = p;
                        }
                        setTabAt(tab, index, new TreeBin<K,V>(hd));
                    }
                }
            }
        }
    }

其实就像是缝衣服,hd是线头,tl是线尾,首先,线头和线尾都插上第一个节点p,第二遍是p1的prev指向p,线尾的next指向新的p,也就是p的next指向第二个节点p1。循环往复,先组织成新的链表,然后再把此链表树化。

示例图如下

技术图片

 

ConcurrentHashMap树化链表treeifyBin

标签:alt   new   set   组织   res   nbsp   示例   ima   oid   

原文地址:https://www.cnblogs.com/javaddd/p/12293609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!