【大数据Java基础- Java并发 12】J.U.C之ConcurrentHashMap红黑树转换分析

本文详细分析了Java并发容器ConcurrentHashMap中,当链表节点超过阈值时转换为红黑树的过程。介绍了红黑树的基本概念、特性,以及在插入节点时如何通过旋转和着色保持红黑树的平衡。通过具体案例展示了从链表转换为红黑树的步骤,并详细解释了treeifyBin方法的实现。
摘要由CSDN通过智能技术生成

之前有提到在put操作时,如果发现链表结构中的元素超过了TREEIFY_THRESHOLD(默认为8),则会把链表转换为红黑树,已便于提高查询效率。代码如下:

if (binCount >= TREEIFY_THRESHOLD)
    treeifyBin(tab, i);

下面博主将详细分析整个过程,并用一个链表转换为红黑树的过程为案例来分析。博文从如下几个方法进行分析阐述:

  1. 红黑树
  2. ConcurrentHashMap链表转红黑树源码分析
  3. 链表转红黑树案例

红黑树

先看红黑树的基本概念:红黑树是一课特殊的平衡二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn)。红黑树每个节点都有一个标识位表示颜色,红色或黑色,具备五种特性:

  1. 每个节点非红即黑
  2. 根节点为黑色
  3. 每个叶子节点为黑色。叶子节点为NIL节点,即空节点
  4. 如果一个节点为红色,那么它的子节点一定是黑色
  5. 从一个节点到该节点的子孙节点的所有路径包含相同个数的黑色节点

请牢记这五个特性,它在维护红黑树时选的格外重要

红黑树结构图如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王知无(import_bigdata)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值