ConcurrentHashMap 的红黑树

本文介绍了ConcurrentHashMap中的红黑树实现。红黑树是一种保证查找效率的二叉树,具备5个特性,插入节点可能导致特性破坏,需要通过旋转和重新着色调整。在1.8版本中,当链表节点数达到8个时,会转为红黑树,若Node数组长度小于64,则优先扩容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ConcurrentHashMap 的红黑树

1、红黑树

红黑树是一种特殊的二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn),每个节点都有一个标识位表示颜色,红色或黑色,有如下5种特性

每个节点要么红色,要么是黑色;

根节点一定是黑色的;

每个空叶子节点必须是黑色的;

如果一个节点是红色的,那么它的子节点必须是黑色的;

从一个节点到该节点的子孙节点的所有路径包含相同个数的黑色节点;

只要满足以上5个特性的二叉树都是红黑树,当有新的节点加入时,有可能会破坏其中一些特性,需要通过左旋或右旋操作调整树结构,重新着色,使之重新满足所有特性。

2ConcurrentHashMap红黑树实现

1.8的实现中,当一个链表中的元素达到8个时,会调用treeifyBin()方法把链表结构转化成红黑树结构

并非一开始就创建红黑树结构,如果当前Node数组长度小于阈值MIN_TREEIFY_CAPACITY,默认为64,先通过扩大数组容量为原来的两倍以缓解单个链表元素过大的性能问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值