final void treeifyBin(Node<K,V>[] tab, int hash) {
int n, index; Node<K,V> 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<K,V> hd = null, tl = null;
//循环节点链,将其转换为树节点链
do {
// 将普通节点(Node)转换成一个红黑树节点(TreeNode)
TreeNode<K,V> 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)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 这篇博客主要讲解HashMap1.8的新增特性:红黑树,关于HashMap的其他内容推荐博客HashMap真的教科...
- 免责声明 本文夹杂部分笔者个人观点,如描述有误,欢迎指正 前言 写这篇文章,是因为最近研究hashmap源码的时候...
- 阅读优秀的源码是提升编程技巧的重要手段之一。如有不对的地方,欢迎指正~转载请注明出处https://blog.lz...