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...