3.1 treeifyBin(初始化红黑树,准备转换) ------ HashMap 源码解析(JDK1.8)

final void treeifyBin(Node[] tab, int hash) {
        int n, index; Node e;
        //当哈希表table的容量不足64的时候,不进行红黑树转换,而是进行扩容
        if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY)
            resize();
        //拿到要转换成为红黑树的桶(节点链),散列算法(n - 1) & hash找到桶的索引
        else if ((e = tab[index = (n - 1) & hash]) != null) {
            //声明一个红黑树根节点hd,tl是用来存放临时数据的等同于temp
            TreeNode hd = null, tl = null;
            //循环节点链,将其转换为树节点链
            do {
                // 将普通节点(Node)转换成一个红黑树节点(TreeNode)
                TreeNode p = replacementTreeNode(e, null);
                if (tl == null)
                    hd = p;
                else {
                    p.prev = tl;
                    tl.next = p;
                }
                tl = p;
            } while ((e = e.next) != null);
            if ((tab[index] = hd) != null)
                hd.treeify(tab);//转化为红黑树
        }
    }

你可能感兴趣的:(3.1 treeifyBin(初始化红黑树,准备转换) ------ HashMap 源码解析(JDK1.8))