Java基础快速入门: 红黑树与TreeSet

Java中的TreeSet TreeSet凭借其有序性和稳定性,成为Java集合框架中不可或缺的有序集合解决方案。深入理解红黑树的实现原理与API特性,能够帮助开发者在数据存储、实时计算、事件调度等场景中做出更优选择。尽管在极端高并发或海量数据场景下可能存在性能瓶颈,但在大多数业务系统中,TreeSet仍以其简洁高效的特性,持续发挥着重要作用。 阅读详情

本文纲要

  1. 红黑树概述
  2. 红黑树的五条红黑规则
  3. 添加节点默认颜色的选择
  4. 添加节点后如何保证红黑规则
    4.1 父节点为黑色
    4.2 父节点为红色,叔叔节点为红色
    4.3 父节点为红色,叔叔节点为黑色
  5. 红黑树与TreeSet实战练习
    5.1 项目结构
    5.2 Student类实现自然排序
    5.3 测试代码
    5.4 底层红黑树插入过程图解
  6. 小结

红黑树概述

红黑树(Red-Black Tree) 是一种自平衡的二叉查找树,在计算机科学中被广泛应用。它最早在1972年由鲁道夫·贝尔提出,当时被称为“平衡二叉B树”,到1978年被修改为现在的形式并命名为红黑树。

红黑树的每个节点都有一个存储位来表示其颜色,只能是红色或黑色。它并非像AVL树那样严格的高度平衡,而是通过自己定义的“红黑规则”来维持一种相对宽松的平衡。这使得它在插入、删除时的旋转次数更少,整体性能更优。

红黑树

是二叉查找树

自平衡,非高度平衡

每个节点带颜色: 红/黑

通过红黑规则维持平衡

左子树 < 节点 < 右子树

平衡条件比AVL树宽松

旋转次数相对较少

提示:与AVL树相比,红黑树不会因为子树高度差超过1就立即旋转,因此在频繁插入删除的场景中效率更高。

红黑树的五条红黑规则

红黑树必须时刻满足以下五条规则:

  1. 每个节点是红色或者黑色。
  2. 根节点必须是黑色。
  3. 每个叶子节点(NIL)都是黑色的。 如果一个节点没有子节点或父节点,其对应指针属性值为NIL,这些NIL被视为叶子节点,且必须为黑色。
  4. 红色节点的子节点必须是黑色。 (不能出现两个连续红色节点)
  5. 对每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。 (“简单路径”是指不能回头的路径)

红黑树节点结构

相较于普通二叉树的节点,红黑树的节点多了一个颜色属性:

class RBNode {
    int key;
    Color color; // RED 或 BLACK 
    RBNode parent;
    RBNode left;
    RBNode right;
}

下面用一个具体红黑树的结构图来说明这些规则:

1 黑

8 红

11 黑

13 黑

15 黑

17 红

25 黑

NIL 黑

NIL 黑

NIL 黑

NIL 黑

NIL 黑

NIL 黑

NIL 黑

NIL 黑

  • 所有叶子都是黑色NIL。
  • 根节点13是黑色。
  • 红色节点(8,17)的子节点(1,11,15,25)全是黑色 → 没有连续红色。
  • 从任一节点到叶子NIL的黑色节点数目相同。

添加节点默认颜色的选择

在红黑树中插入新节点时,默认颜色应该设置为红色还是黑色呢?我们通过对比分析:

1 ) 假设默认颜色为黑色

插入顺序:20(根), 18, 23

  1. 插入20(黑) — 符合规则。
  2. 插入18(黑) — 20的左子树黑高增加,破坏了规则5(左右路径黑色节点数不等),需要将18改为红色。
  3. 插入23(黑) — 同样破坏规则5,又需要将23改为红色。

结果:插入3个节点需要调整2次。

2 ) 假设默认颜色为红色

插入顺序:20, 18, 23

  1. 插入20(红) — 破坏规则2(根必须黑),直接变色为黑即可。
  2. 插入18(红) — 父节点20为黑色,无需调整。
  3. 插入23(红) — 父节点20为黑色,无需调整。

结果:插入3个节点只需要调整1次(仅根节点变色)。

显然,默认颜色为红色效率更高,红黑树也正是这样设计的。

是

否

是

否

新节点默认颜色

红色

根节点?

直接变黑

父节点黑色?

无需调整

需要进一步修复

添加节点后如何保证红黑规则

当插入新节点(默认为红色)后可能破坏红黑规则,此时需要根据父节点颜色以及叔叔节点颜色进行修复。主要分为以下几种情况:

1 ) 父节点为黑色

结论:什么都不需要做,插入红色节点不会破坏任何规则。

2 ) 父节点为红色,叔叔节点为红色

修复步骤(三步走):

  1. 将父节点设置为黑色。
  2. 将叔叔节点设置为黑色。
  3. 将祖父节点设置为红色。
  4. 如果祖父节点是根节点,则再将其变回黑色。

示意图:假设插入22节点后,结构如下(父23红,叔18红):

18 红

20 黑

22 红

23 红

NIL

NIL

NIL

修复后:父23变黑,叔18变黑,祖父20变红。由于20是根,再变回黑。

18 黑

20 黑

22 红

23 黑

NIL

NIL

NIL

3 ) 父节点为红色,叔叔节点为黑色

这是最复杂的情况,需要旋转 + 变色。修复步骤:

  1. 将父节点设置为黑色。
  2. 将祖父节点设置为红色(注意:叔叔节点颜色不变)。
  3. 以祖父节点为支点进行旋转:
    • 如果新节点在 左子树的左侧(LL型) → 进行右旋。
    • 如果新节点在 右子树的右侧(RR型) → 进行左旋。
    • 如果是内侧插入(LR或RL)则需要先旋转子树变成外侧情况,再按上述处理。

示例:在已有树中插入14,父15红,叔NIL黑(NIL视为黑色)。

插入后结构(15,16,18关系,14在15的左边):

14 红

15 红

16 红

18 黑

19 黑

NIL

NIL

修复过程:
父节点15变黑。
祖父节点16变红。
以16为支点进行右旋:15上升为子树根,16变成15的右子节点。

旋转后

14 红

15 黑

16 红

18 黑

19 黑

NIL

NIL

右旋示意图:

旋转前: 16为支点

16

15

?

14

?

旋转后: 15上升

15

14

16

?

?

归纳成一张完整的插入修复流程图:

是

否

黑色

红色

红色

黑色/NIL

外侧LL/RR

内侧LR/RL

插入新节点,默认红色

是否为根节点?

直接变黑色

父节点颜色?

无需任何操作

叔叔节点颜色?

1.父变黑 2.叔变黑 3.祖父变红 4.若祖父为根再变黑

1.父变黑 2.祖父变红 3.根据结构旋转

插入位置

单旋转 右旋/左旋

先旋子树再旋祖父

红黑树与TreeSet实战练习

TreeSet 底层就是基于红黑树实现的,它是一个可以自动排序的集合。
下面我们通过一个练习:创建学生对象并按总分排序,来深入理解红黑树的应用。

1 ) 项目结构

MySet/
└── src/
    └── com/
        └── wb/
            └── treesettest/
                ├── Student.java 
                └── TreeSetTest.java 

2 ) Student类实现自然排序

要让 TreeSet 能够对学生对象排序,必须指定排序规则。这里实现 Comparable 接口(自然排序),重写 compareTo 方法。

package com.wb.treesettest;
 
public class Student implements Comparable<Student>{
    private String name;
    private int chinese;
    private int math;
    private int english;
 
    public Student() {
    }
 
    public Student(String name, int chinese, int math, int english) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
    }
 
    // 省略 getter/setter (保持原有完整代码即可)
 
    @Override 
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", chinese=" + chinese +
                ", math=" + math +
                ", english=" + english +
                '}' + "总分为" + getSum();
    }
 
    // 计算总分 
    public int getSum(){
        return chinese + math + english;
    }
 
    @Override 
    public int compareTo(Student o) {
        // 按照总分从高到低排序 (o - this 表示降序)
        int result = o.getSum() - this.getSum();
        // 次要条件1:总分一样,比较语文成绩 
        result = result == 0 ? o.getChinese() - this.getChinese() : result;
        // 次要条件2:语文一样,比较数学成绩 
        result = result == 0 ? o.getMath() - this.getMath() : result;
        // 次要条件3:数学一样,比较英语成绩 
        result = result == 0 ? o.getEnglish() - this.getEnglish() : result;
        // 次要条件4:成绩都一样,按姓名排序 
        result = result == 0 ? o.getName().compareTo(this.getName()) : result;
        return result;
    }
}

补充说明:compareTo 中的 this 代表当前待插入元素,o 代表红黑树中已存在的元素。使用 o.getSum() - this.getSum() 会实现从大到小(降序)排序。如果需要从小到大(升序),只需改为 this.getSum() - o.getSum()。记混了也没关系,写完运行看结果,不符合期望再调换 this 和 o 即可。

3 ) 测试代码

package com.wb.treesettest;
 
import java.util.TreeSet;
 
public class TreeSetTest {
    public static void main(String[] args) {
        TreeSet<Student> ts = new TreeSet<>();
 
        Student s1 = new Student("dahei", 80, 80, 80);    // 总分240 
        Student s2 = new Student("erhei", 90, 90, 90);    // 总分270 
        Student s3 = new Student("xiaohei", 100, 100, 100); // 总分300 
 
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
 
        for (Student student : ts) {
            System.out.println(student);
        }
    }
}

输出结果(从大到小):

Student{name='xiaohei', chinese=100, math=100, english=100}总分为300 
Student{name='erhei', chinese=90, math=90, english=90}总分为270 
Student{name='dahei', chinese=80, math=80, english=80}总分为240 

4 ) 底层红黑树插入过程图解

当我们依次添加 s1(240)、s2(270)、s3(300) 时,底层红黑树的变化过程如下(使用降序规则,this=待插入,o=已存在):
第一步:插入 s1 (240) 作为根节点

240 红

根节点不能为红色 → 直接变黑:

240 黑

第二步:插入 s2 (270),总分 270 > 240,按降序规则 (o - this) 结果为负,应放在左边

240 黑

270 红

NIL

NIL

NIL

父节点为黑色 → 无需调整。

第三步:插入 s3 (300),300 > 240 且 > 270,最终放在270的左边

240 黑

270 红

300 红

NIL

NIL

此时出现连续红色节点(270红,300红),触发修复:

  • 父节点270红,叔叔节点是NIL(黑) → 属于“父红叔黑”情况。
  • 且新节点在左子树的左侧(LL型) → 需要进行右旋。

修复步骤:

  1. 父节点270变黑。
  2. 祖父节点240变红。
  3. 以祖父240为支点进行右旋 → 270上升为根,240降为270的右孩子。

右旋后

240 红

270 黑

300 红

NIL

NIL

NIL

NIL

注意:270变黑后成为新根,如果是根必须保持黑色,已经满足;240变红后不再是根,合法。所有规则重新得到满足。

中序遍历红黑树的顺序是:左子树 → 当前节点 → 右子树,因此输出结果为:300 → 270 → 240,即从大到小排列。如果要升序,只需修改 compareTo 中的相减顺序,底层红黑树的左右结构将会镜像反转。

小结

  1. 红黑树是一种自平衡二叉查找树,通过“红黑规则”而非绝对高度差来维持平衡。
  2. 五条红黑规则必须牢记,尤其是“黑高相同”和“无连续红色”。
  3. 插入节点时默认颜色为红色,效率更高。
  4. 插入后的修复依赖于父节点与叔叔节点的颜色,核心操作包括:
    • 变色
    • 左旋 / 右旋
  5. Java中的 TreeSet 底层就是红黑树,存入的元素必须实现 Comparable 或传入 Comparator 才能自动排序。
  6. 自然排序方法 compareTo 中,this 代表新元素,o 代表已存在元素,灵活调换两者即可改变升/降序。

红黑树是面试和实际开发中的重点数据结构,理解其平衡原理和旋转过程对后续学习 TreeMap、HashMap(链表转红黑树)等都大有裨益。建议结合动图或亲手画出插入过程来加深印象,切勿死记硬背。

本文基于红黑树经典理论及TreeSet底层实现编写,配合代码实战,助你快速入门。

Java HashSet 与 TreeSet 的深度对比 HashSet 和 TreeSet 是 Java 集合框架中两种最常用的 Set 实现,它们在底层实现、性能特性和使用场景上有显著差异。以下是两者的全面对比分析: 基于哈希表实现(数组+链表+红黑树,JDK8+) 依赖元素的 和 方法 2. TreeSet 实现原理 基于红黑树(自平衡二叉查找树)实现 依赖元素的自然顺序或 进行排序 三、性能对比详解 1. 基本操作时间复杂度 操作 HashSet TreeSet add() O(1) 均摊 O(log n) remove 阅读详情

相关推荐

TreeSet和红黑树之fixAfterInsertion方法

近日突然对学习源码很有兴趣,今天的主题是TreeSet和TreeMap,本篇文章的Keywords:TreeSet add 红黑树 fixAfterInsertion TreeSet TreeSet继承于AbstractSet,并且实现了NavigableSet接口 TreeSet的本质是一个"有序的,并且没有重复元素"的集合,它是通过TreeMap实现的。TreeSet中含有一个"NavigableMap类型的成员变量"m,而m实际上是"TreeMap的实例"。其内部是是用了TreeMap,S

weixin_38964103的博客 670

Java之红黑树

1、简介 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。 它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。 红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1,所以红黑树不是

qq_41720578的博客 5602

【Java集合 2】Java链表、散列表、HashSet、TreeSet

从数组中间删除一个元素开销很大,其原因是向数组中插入元素时,此元素之后的所有元素都要向后端移动,删除时也是,数组中位于被删除元素之后的所有元素都要向数组的前端移动。

学Java,找哪吒 3188

Java——红黑树

红黑树是一种平衡二叉搜索树,其节点由红、黑两种颜色组成。

m0_59408612的博客 1722

Java零基础-集合:TreeSet

在Java集合框架中,TreeSet是一个实现了Set接口的有序集合,它能够根据元素的自然顺序或者构造时提供的Comparator对象来对元素进行排序。对于Java零基础的学习者来说,理解TreeSet的用法对于掌握Java集合操作非常重要。本文将详细介绍Java中的TreeSet,包括其特性、操作方法、应用场景、优缺点分析,并通过代码示例和测试用例,帮助Java零基础的学习者快速掌握TreeSet的使用。TreeSet底层是基于红黑树实现的,它能够确保元素处于排序状态。与HashSet相比,

喵手的博客 1062

win10 离线安装.Net Framework3.5

起因,安装软件比如3dmax2014等需要.Net Framework3.5支撑,那么需要安装低版本的.Net Framework3.5 闲话少说。 1.下载 NetFx3.cab 链接: https://pan.baidu.com/s/124to7F3BOy4yAlY61OjbDg 提取码: kixu 2.将NetFx3.cab 放入 系统盘的windows目录下(示例 C:\Wi...

m0_37615458的博客 7726

Java 实现 红黑树(通俗易懂)

红黑树的概念和模拟实现

每篇博客都不是最终版,都会随着我的学习更新 3052

OpenWebUI联网搜索实战:如何用SearXNG让本地大模型获取实时信息(附百度/360配置)

本文详细介绍了如何通过部署开源元搜索引擎SearXNG,为本地运行的OpenWebUI大语言模型(如Qwen、Llama)配置联网搜索功能,解决其知识库过时的问题。文章重点讲解了SearXNG的Docker部署、集成国内搜索引擎(如百度、360)的配置方法,以及如何与OpenWebUI无缝对接,从而实现本地大模型获取实时、准确的中文信息,提升其实用性。

weixin_28835583的博客 1887

Java高阶数据结构之红黑树

本文是Java高阶数据结构的学习,剖析红黑树底层原理,红黑树的时间复杂度,红黑树的插入以及插入时的平衡调整。之后的学习内容将持续更新!!!

qq15035899256的博客 3727

Endnote 导入参考文献的时候,格式错误太多了。et.al错误,国标GBT7714在endnote中的详细配置教程,适用于本科,硕士论文文献插入的模板

EndNote插入文献常遇到以下错误主要如下: 等、et al不分; 英文作者全名大写; 期刊名字使用了缩写(图片里没有体现;卷号、期号缺失时出现乱码,多了半个括号;页码范围略去了相同部分;没有悬挂缩进,本文全部解决,全网最细

sakura的博客 3万+

如何适配自定义激光雷达数据到LIO-SAM:解决ring和time参数缺失问题

本文详细解析了如何将非标准激光雷达(如速腾、Livox)适配到LIO-SAM框架中,重点解决ring和time参数缺失问题。提供了从源码修改到通用适配中间件的多层级解决方案,并包含实机测试与性能调优指南,帮助开发者高效完成雷达数据适配。

weixin_42551227的博客 421

红黑树理解以及Java实现

我对红黑树的理解 红黑树本身并不复杂,只是在插入删除的时候情况比较多,如果强行记忆的话会显得比较困难,而且容易忘记。所以以前对红黑树一直没有很好的掌握。恰好这次借着复习数据结构的机会,静下心来仔细的学习了一下红黑树,所以用这篇文章把我对红黑树的操作的理解记录下来,在理解的基础上记忆会容易得多,这样以后就不用重复学习啦! 1. 红黑树的定义 红黑树是一颗二叉查找树,且具有如下...

qq_41854763的博客 1万+

大疆A型板使用经验分享(四)—— PWM和舵机SG996的控制

一. j

weixin_43361652的博客 3881

【Java数据结构】TreeMap 与 TreeSet 深入解析

本文深入解析了JDK8中TreeMap与TreeSet的底层实现原理。TreeMap基于红黑树实现,通过Entry内部类构建节点结构,维护红黑树性质保证O(log n)的操作效率。TreeSet则利用TreeMap作为底层存储,将元素作为键实现有序性和唯一性。文章详细介绍了两种数据结构的基本操作实现原理,包括查找、插入和删除过程,以及为维护红黑树平衡进行的旋转和颜色调整操作。两者都支持自然排序和定制排序,但都不允许null元素。这些特性使得TreeMap和TreeSet成为Java集合框架中高效的有序集合实

手心朝下的博客 1868

Swin Transformer 类可视化(grad CAM)

完整代码 from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM from pytorch_grad_cam.utils.image import show_cam_on_image from torchvision.models import resnet50 import glob from demo import parse_option from models i

G果的博客 6639

Docker 环境 Playwright MCP 部署全流程指南

Docker部署Playwright MCP全流程指南 本文详细介绍了使用Docker容器化部署Playwright MCP的完整流程,涵盖镜像拉取、容器启动、配置优化和问题排查。主要内容包括: 核心部署步骤:通过官方镜像快速搭建环境,支持自定义端口和数据持久化 关键配置要点:详解网络设置、持久化目录挂载和环境变量配置 服务验证方法:通过日志检查和服务连通性测试确保部署成功 客户端集成:提供VS Code等IDE的配置示例 常见问题解决:针对浏览器启动超时、跨域限制等问题给出解决方案 实战案例:演示自动化爬

勤奋的码农 1474

【Java】TreeSet()详解

1.概述 在本文中,我们将介绍Java Collections Framework的一个组成部分,以及最受欢迎的Set实现之一 TreeSet。 2. TreeSet简介 简而言之,TreeSet是一个有序集合,它扩展了AbstractSet类并实现了NavigableSet接口。 以下是此实现最重要方面的快速摘要: 它存储唯一的元素 它不保留元素的插入顺序 它按升序对元素进行排序 它不是线程安...

beautiful_huang的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java treeset 红黑树_红黑树和TreeSet与TreeMap

1. Treeset我们都知道,是一个有序的集合。但是如果分析TreeSet的实现源码,会发现构造方法中存在 TreeMap。换句话说:TreeSet的底层就是通过TreeMap来实现2.TreeMapTreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。向TreeMap中每次Put一对Entry时,实际上是给红黑树中添加一个节点。这种方...

weixin_33138569的博客 596

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java集合类TreeMap和TreeSet

看这篇博客前,我觉得很有必要先看下我之前的几篇博客 Red-Black Trees(红黑树)                                         (TreeMap底层的实现就是用的红黑树数据结构)探索equals()和hashCode()方法                                 (TreeMap/TreeSet实现使用到的核心方法)

3万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Java 源码探秘】TreeSet 与 TreeMap:红黑树在 Java 集合中的孪生实现

本文深入探讨了Java集合框架中的TreeSet与TreeMap实现,揭示其基于红黑树的有序集合特性。通过源码分析展示了红黑树的自平衡机制、旋转着色操作,以及TreeSet适配器模式的设计精妙。文章对比了不同集合实现的性能差异,并提供了实际应用场景中的优化建议,帮助开发者高效利用红黑树实现O(log n)时间复杂度的数据操作。

weixin_34341117的博客 371

Java基础快速入门:TreeSet底层数据结构——树

本文系统介绍了树结构的基础知识及其在Java集合框架中的应用。首先讲解了树的基本结构,包括节点的组成和二叉树的定义;接着详细阐述了二叉查找树(BST)的特性与节点插入规则,并通过Java代码演示实现;最后引入平衡二叉树的概念,说明其通过旋转机制(左旋、右旋)维持平衡的必要性。这些内容是理解TreeSet、TreeMap等有序集合底层实现(红黑树)的重要基础,为后续学习高级树结构奠定理论基础。

Wang的专栏 458

【JavaSE专栏52】Java集合类TreeSet解析,基于红黑树实现的有序非重集合

本文讲解了 Java 中集合类 TreeSet 的语法、使用说明和应用场景,并给出了样例代码。

Designer 小郑的技术博客 2213

Java中HashSet、LinkedHashSet和TreeSet的底层原理

Java中的HashSet的底层原理主要基于哈希表(HashMap)来实现。HashSet内部使用哈希表(实际上是一个HashMap的实例)来存储元素。哈希表由一个数组(桶)和多个链表(或红黑树,在Java 8及以后版本中,当链表长度超过某个阈值时,会转换为红黑树)组成。当向HashSet中添加元素时,首先会计算该元素的哈希码(通过调用对象的hashCode()方法)。哈希码是一个整数,用于确定元素在哈希表中的位置。使用哈希码和哈希表的大小(即桶的数量)来计算元素应该存放在哪个桶中。

m0_72244040的博客 1758

【转】java中的TreeMap与TreeSet关系及实现(红黑树)

java中treemap和treeset实现(红黑树) TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。 TreeSet 和 TreeMap 的关系 为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class Tre

chenloxiaoea的博客 576

java集合类TreeMap和TreeSet及红黑树

看这篇博客前,我觉得很有必要先看下我之前的几篇博客 Red-Black Trees(红黑树)                                         (TreeMap底层的实现就是用的红黑树数据结构)探索equals()和hashCode()方法                                 (TreeMap/TreeSet实现使用到的核心方

xorxos的专栏 1万+
上一篇: Java基础快速入门:TreeSet底层数据结构——树
下一篇: Java基础快速入门:HashSet深入解析
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值