# Java底层的红黑树实现探秘
## 1. 引言
在Java编程中,红黑树是一种自平衡的二叉查找树,广泛应用于数据结构与算法中。Java的集合类(如`TreeMap`和`TreeSet`)均是基于红黑树实现的,这使得它们在处理有序数据时更高效。但对初学者来说,理解红黑树的实现和应用往往显得困难。本文将通过具体步骤,帮助你了解Java底层如何使用红黑树,同时提供代码示例和详细注释。
## 2            
                
         
            
            
            
            基本结构:> 每个节点或者是黑色,或者是红色;
> 根节点必须是黑色;
> 每个叶子节点是黑色﹔
  Java实现的红黑树将使用null 来代表空节点,因此遍历红黑树时将看不到黑色的叶子节点,反而看到每个叶子节点都是红色的;
> 如果一个节点是红色的,则它的子节点必须是黑色的:(红节点不能连接红节点,但是黑节点可以连接黑节点)
  从每个根到节点的路径上不会有两个连续的红色            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-02 16:18:44
                            
                                42阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            红黑树特性:(1) 每个节点或者是黑色,或者是红色。(2) 根节点是黑色。(3) 每个叶子节点是黑色。 (指为空的叶子节点)(4) 如果一个节点是红色的,则它的子节点必须是黑色的。(5) 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。 将插入的节点默认着色为红色,就不会违背"特性(5)"!少违背一条特性,意味着需要处理的情况就越少。左旋:就是将该节点变为该节点的左子节点,并让该节点            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-12 06:27:07
                            
                                38阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            树1.基本概念节点的度树的度叶子节点双亲节点(父节点)孩子节点树2.二叉树(对树的逻辑结构添加约束)二叉链表物理存储结构二叉树的不同形态对树的逻辑结构添加哪些约束条件形态一、满二叉树形态二、完全二叉树完全二叉树的高度二叉树的缺点3.二叉查找树(Binary Search Tree)(二叉搜索树,二叉排序树)二叉查找树的优点二叉查找树的复杂度4.自平衡二叉树(AVL树、平衡二叉查找树,继承二叉查找            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-10 21:00:45
                            
                                21阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、红黑树介绍红黑树是二叉查找树,红黑树的时间复杂度为: O(lgn)红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)每个红色结点必须有两个黑色的子结点(5)从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点红黑树的应用比较广泛,主要是用它来存储有            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-10 10:42:16
                            
                                26阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                            HashMap原理+红黑树一、HashMap原理        HashMap采用Entry数组来存储key-value对,每一            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-14 21:43:09
                            
                                115阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            目录一、二叉搜索树1、 二叉搜索树的概念2、二叉搜索树查找节点的过程3、查找性能分析4、如何避免二叉搜索树出现查询效率过低的问题?二、AVL树1、AVL树的特点2、为什么有了AVL平衡树还需要红黑树呢?三、红黑树1、红黑树概念2、红黑树的特点3、红黑树的定义4、红黑树中的操作5、红黑树插入情景分析四、手写一棵红黑树1、代码2、插入测试 在学习红黑树的实现原理之前,首先要明白为什么会出现红黑树?它            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-10 16:02:18
                            
                                41阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            R-B Tree简介R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。  (2)根节点是黑色。  (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]  (4)如果一个节            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-24 17:03:57
                            
                                54阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            红黑树是众多“平衡的”搜索树模式中的一种,在最坏情况下,它相关操作的时间复杂度为O(log n)。1、红黑树的属性红黑树是一种二分查找树,与普通的二分查找树不同的一点是,红黑树的每个节点都有一个颜色(color)属性。该属性的值要么是红色,要么是黑色。通过限制从根到叶子的任何简单路径上的节点颜色,红黑树确保没有比任何其他路径长两倍的路径,从而使树近似平衡。假设红黑树节点的属性有键(key)、颜色(            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-25 10:38:02
                            
                                112阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            红黑树本身并不复杂,只是在插入删除的时候情况比较多,如果强行记忆的话会显得比较困难,而且容易忘记。所以以前对红黑树一直没有很好的掌握。恰好这次借着复习数据结构的机会,静下心来仔细的学习了一下红黑树,并用Java实现了一番。所以用这篇文章把我对红黑树的操作的理解记录下来,在理解的基础上记忆会容易得多,这样以后就不用重复学习啦!1. 红黑树的定义红黑树是一颗二叉查找树,且具有如下特性:     (1)            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-05 10:37:58
                            
                                39阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            什么是红黑树?红黑树为一种特殊的二叉查找树,但相较于二叉查找树,红黑树自平衡的二叉查找树。红黑树和二叉平衡树的区别 1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。 2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。 所以红黑树有着比二叉平衡树            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-23 13:47:43
                            
                                43阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            总体介绍JDK1.8的HashMap:底层实现(数组+链表/红黑树)1、为什么要从JDK1.8之前的链表设计,修改为链表或红黑树的设计?当某个链表比较长的时候,查找效率还是会降低。为了提高查询效率,那么把table[index]下面的链表做调整。如果table[index]的链表的节点的个数比较少,(8个或以内),就保持链表。如果超过8个,那么就要考虑把链表转为一棵红黑树。TREEI            
                
         
            
            
            
             一、红黑树的介绍红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。红黑树的特性:(1) 每个节点            
                
         
            
            
            
            前言红黑树是一种特殊的B树是B树种2-3-4树的一种特殊实现,红黑树保证了每个节点只会有两个子节点,通过对每个节点进行染色,然后通过不同颜色的节点组合来分别代表2-3-4的2节点、3节点、4节点树的情况。在学习红黑树之前,我们需要先去了解2-3-4树。一、 B树那么如果想要对红黑树有一个较为深刻的理解,我认为首先去理解其根源,也就是B树是必不可少的1.1 概念树形结构首先可以分为等叉树和不等叉树,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-31 18:51:59
                            
                                52阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            图解红黑树 目录图解红黑树一、红黑树的五条规则二、红黑树的三种变换2.1.变色2.2.左旋转2.3.右旋转三、红黑树的插入操作3.1.情况13.2.情况23.3.情况33.4.情况43.5.情况53.6.案例插入10插入9插入8插入7插入6插入5插入4插入3插入2**插入1**四、红黑树的删除操作 一、红黑树的五条规则红黑树除了符合二叉搜索树的基本规则外,还添加了以下特性:规则1:节点是红色或黑色            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-11 21:40:01
                            
                                128阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            前言前段时间在研究 JDK1.8 的 hashmap 源码,看到 put 方法的插入环节,遇到了红黑树,不得不停止阅读源码的过程,因为还没掌握红黑树是无法完全读透 hashmap 源码的。红黑树作为一种数据结构,它被应用得非常多,可能很多人不认识它,但其实它已经在默默为我们的代码在发光发热。例如,你只要在 Java 中用到 map,基本上就是在用红黑树(当元素个数到达八个时链表转红黑树)。PS:在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-28 14:46:51
                            
                                62阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、红黑树比较重要的特性1、红黑树每个节点要么是黑色、要么是红色2、根节点是黑色3、红色节点的所有儿子都是黑色节点(也就是说从根节点到叶子结点的路径上不能出现连续的红色节点)4、从根节点到叶子结点的每一条路径上拥有相同的黑色节点个数n个节点的红黑树的最大深度不超过2log(n+1),其首先是一颗查找树,其次是平衡树的一个变种。其具有o(logn)的插入删除操作复杂度,操作性能比较好,java的Tr            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-04 14:13:51
                            
                                116阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
              红黑树是一种自平衡二叉查找树(binary search tree,BST),红黑树是一种比较复杂的数据结构,红黑树查找、插入、删除元素的时间复杂度为O(log n),n是树中元素的数目.文章的要讲的知识点如下:  一、红黑树的基本介绍    红黑树插入节点    红黑树删除节点  二、红黑树应用实例:Jdk中的TreeMap一、红黑树的基本介绍   二叉查找树(binary search t            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-19 06:53:45
                            
                                61阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            java实现红黑树(个人手写)1.红黑树概念平衡二叉查找树 (1)节点非红即黑 (2)根节点为黑色 (3)红色节点不能相邻 (4)任意节点到根节点黑色节点数相同 (5)叶子节点为黑色红黑树展示网站2.实现思路红黑树什么时候发生旋转? 父节点为红色 叔叔节点为null或者为黑色 个人认为分为下面四种情况: (1)0001 需要旋转变成 0002 的 左孩子 (2)0003 需要旋转成 0002 的右            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-03 16:16:44
                            
                                86阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            在java语言中,TreeMap TreeSet 等都是基于红黑树的原理实现的,主要是用它来存储有序的数据,时间复杂度是O(lgn),效率非常之高,在学习这些数据集合的时候,了解到红黑树,由此对红黑树进行了深入的学习。1、文中提到的给一个节点到兄弟,或者拿一个节点过来,其实都是很多文章中提到了左旋与右旋的目的;2、我这里面画的图真的不如维基百科的图,主要是传递一些我总结的的理解方式红黑树是基于二叉            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-31 14:14:52
                            
                                89阅读