在上一节中,HashMap在jdk 1.8中用了链表和红黑树两种方式解决冲突,在TreeMap中也是用红黑树存储的。下面分析一下红黑树的结构和基本操作。 一、红黑树的特征和基本操作 上一节中已经描述了红黑树的基本概念和特…
标签:红黑树
通过TreeMap理解红黑树
本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及由此产生的调整过程。 总体介绍 Java TreeMap实现了SortedM…
一文掌握关于Java数据结构所有知识点(欢迎一起完善)
在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫)。所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识。本…
JDK源码(容器篇)
JDK容器 前言 阅读JDK源码有段时间了,准备以博客的形式记录下来,也方便复习时查阅,本文参考JDK1.8源码。 一、Collection Collection是所有容器的基类,定义了一些基础方法。List、Set、M…
c++ STL 红黑树实现
红黑树是一种自平衡二叉查找树,它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。 红黑树应用: 1.linux内核中,进…
我的红黑树学习笔记
红黑树 红黑树的规则: 每个节点非黑即红。 根结点是黑色。 叶结点 (NIL) 是黑色。 如果一个结点是红色, 则它的两个子节点都是黑色的。 从根结点出发到所有叶结点的路径上, 均包含相同。 调整策略: 插入调整站到 祖…
nginx笔记:红黑树
看代码前请先通过这里下载一份wikipedia关于红黑树的介绍,我做了一些批注,结合上面的内容看nginx实现的红黑树要简单一些,不然直接看源码有点头痛。 nginx实现的红黑树…
红黑树与小根堆性能对比(java)
因为nginx与libevent采用了不同的数据结构来维护超时事件,其中nginx采用了红黑树,libevent采用的是小根堆,所以一直比较好奇,这两种数据结构谁在这种应用场景下更合适(当做优先权队列来用) 好吧,好奇那…
数据结构之红黑树(二)——插入操作
插入或删除操作,都有可能改变红黑树的平衡性,利用颜色变化与旋转这两大法宝就可应对所有情况,将不平衡的红黑树变为平衡的红黑树。 在进行颜色变化或旋转的时候,往往要涉及祖孙三代节点:X表示操作的基准节点,P代表X的父节点,G…
java学习(七) —— API集合类
前言 在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们实现已经明确知道我们将要保存的对象的数量。 一旦在数组初始化时指定了数组长度,这个数组长度就是不可变的,如果我们需要保存一个…
红黑树算法简要介绍
1. 简介 红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multise…
红黑树之二(删除节点)
红黑树的另一个重要的操作是删除节点,它也可以分为两步: 找到要删除的节点,并删除它 对树进行调整使得树满足红黑树的要求 一、删除节点 从排序树中删除节点的思路是一样的,首先找到要删除的节点,并做如下处理: 如果该节点不存…