中间件核心技术与实战
丁威
中通快递资深架构师,RocketMQ 社区首席布道师
19674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
中间件核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

04 | 红黑树:图解红黑树的构造过程与应用场景

你好,我是丁威。
这节课,我们继续 Java 中常用数据结构的讲解。我会重点介绍 TreeMap、LinkedHashMap 和  PriorityQueue 这三种数据结构。

TreeMap

先来看 TreeMap。TreeMap 的底层数据结构是一棵红黑树,这是一种比较复杂但也非常重要的数据结构。它是由树这种基础的数据结构演化而来的。
我们知道,在计算机领域,树指的就是具有树状结构的数据的集合。把它叫做“树”,是因为它看起来像一棵自上而下倒挂的树。一棵树通常有下面几个特点:
每个节点都只有有限个子节点或无子节点;
没有父节点的节点称为根节点;
每一个非根节点有且只有一个父节点;
除了根节点外,每个子节点可以分为多个不相交的子树;
树里面没有环路(cycle)。
如果一棵树的每个节点最多有两个子树,那它就是一棵二叉树。二叉树是“树”的一个重要分支,我们可以通过文稿中这张图来直观感受一下:
但是如果数据按照这样的结构存储,想要新增或者查找数据就需要沿着根节点去遍历所有的节点,这时的效率为 O(n),可以看出性能非常低下。作为数据结构的设计者,肯定不能让这样的事情发生。
这时候,我们就需要对数据进行排序了,也就是使用所谓的二叉排序树(二叉查找树)。它有下面几个特点:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

红黑树及其应用场景 本文深入介绍了红黑树及其在Java中的应用。红黑树是一种自平衡的二叉查找树,具有节点颜色属性,能够实现树的自平衡,保证查找、插入和删除节点的时间复杂度为O(logn)。文章通过图解和讲解介绍了红黑树的构造过程及其应用场景。重点介绍了Java中常用的数据结构TreeMap、LinkedHashMap和PriorityQueue,帮助读者快速了解红黑树的构造过程,以及这三种数据结构的特点和应用场景。此外,文章还介绍了红黑树在中间件开发领域的广泛应用,如一致性哈希算法的实现以及在RocketMQ中的具体应用。通过图解和实际应用场景的介绍,使读者更好地理解和掌握这些数据结构的使用方法和优势。LinkedHashMap是LinkedList和HashMap的结合体,提供了按节点插入顺序和按节点的访问性顺序两种顺序性机制,常用于LRU算法的实现。优先级队列是实现定时调度的核心数据结构。整篇文章内容丰富,适合对数据结构和算法感兴趣的读者阅读,帮助他们深入理解红黑树的工作机制以及相关数据结构的特点和应用场景。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《中间件核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 小豹哥
    老师好猛哈,别的课程不会像你这样细。太值了

    作者回复: 谢谢你的认可,红黑树在数据结构中的面试也比较多,但红黑树的构建过程,各种情况不需要死记硬背,在期中测评的时候我们会再来说一下红黑树。

    2022-06-24
    3
    3
  • 麻婆豆腐
    不行了已经溢出了,只能mark下能力够了再回来巩固下。

    作者回复: 你好,建议你看一下马上要更新的期中测试与期中测试题,里面就有提到红黑树,其实完全不需要死记硬背,是有技巧的

    2022-07-03
    1
  • William Ning
    目前个人的看法: 最小堆似乎是红黑树的特殊情况。

    作者回复: 我也谈谈我的个人理解:最小堆与红黑树一个比较大的不同是最小堆只限定根节点与子节点的大小关系,但不限制两个子节点之间的关系,即不像红黑树一样按顺序遍历,最小堆强调的是min语义,找最小值,当然红黑树一样可以比较轻易找到最小值。

    2022-07-07
    2
  • 码小呆
    后面的队列,懵逼了

    作者回复: 你好,你是说的优先级队列?

    2022-06-22归属地:上海
  • 雨落~紫竹
    红黑树 纯属靠记那几条概念

    作者回复: 你好,其实不需要记忆,主要是这种记忆也无法持久,我分享一下我的理解,希望对你有所帮助(在期中测试-答案中有详细描述): 首先我谈一下染色,需要变换染色的情况,通常是相关的三个节点组成的结构是一个父节点带两个节点,因为需要确保红黑树的性质5,那就是从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。 然后再来谈左旋或右旋,就是通过降低树的高度来实现平衡,但调整后需要满足根结点比左节点大,比右节点小的规则。

    2022-06-22归属地:上海
  • William Ning
    FYI 建议结合着下面的文档一起学习,思考。 红黑树 https://time.geekbang.org/column/article/68638 堆 https://time.geekbang.org/column/article/69913
    2022-07-07
    3
  • William Ning
    另外,“如果下一次执行时间大于等于当前时间,则将队列中第一个元素 (调度任务) 从队列中移除,投入线程池中执行。如果下一次执行时间小于当前时间,则不处理,因为队列中最小的待执行任务都还没有到执行时间,其他任务一定也是这样。”这个时间大小关系,是否弄反了? TBD
    2022-07-07
    1
    1
  • 哲里哲里
    第一次红黑树为啥子节点一定是红色的?
    2022-07-10
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部