TreeMap 与 Red-Black Tree 的关系,原来背后是这样一棵树!

开篇语

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

在 Java 中,TreeMap 是实现了 Map 接口的一个非常常用的数据结构,它按照键的自然顺序或给定的比较器对元素进行排序,并能保证元素的顺序性和高效的查询、插入和删除操作。而其背后最核心的实现就是 红黑树(Red-Black Tree),它是 TreeMap 有序性和高效性能的基础。

你可能会想:“TreeMap 和红黑树到底是什么关系呢?它们有怎样的内在联系?” 今天我们就来深度解析一下 TreeMap 和红黑树的关系,顺便了解红黑树是如何帮助 TreeMap 实现高效排序的。

准备好了吗?跟着我一起深入挖掘!

1. 什么是 TreeMap?

1.1 TreeMap 简介

TreeMap 是 Java 中的一个有序映射实现,它实现了 NavigableMapSortedMap 接口。TreeMap 的元素会按照键的自然顺序或者提供的比较器进行排序,这使得它非常适合需要排序的场景。

  • 有序TreeMap 的键按照自然顺序或者给定的比较器进行排序。
  • 高效查找、插入、删除TreeMap 能够保证操作的时间复杂度为 O(log n),这得益于它使用了红黑树作为底层数据结构。

1.2 TreeMap 的核心成员

  • 红黑树(Red-Black Tree)TreeMap 的底层实现是红黑树,红黑树是一种自平衡的二叉搜索树,它保证了每个操作(插入、删除、查找)的时间复杂度为 O(log n)。

  • 键值对存储TreeMap 存储的是键值对数据,且每个键值对是按照键的顺序排序的。

2. 什么是红黑树?

2.1 红黑树简介

红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它的每个节点都有一个颜色(红色或黑色),并且满足以下特性:

  1. 节点颜色:每个节点要么是红色的,要么是黑色的。
  2. 根节点:根节点是黑色的。
  3. 叶节点:所有的叶子节点都是黑色的(这些叶子节点是 NIL 节点,表示树的边界)。
  4. 红色节点的子节点:如果一个节点是红色的,那么它的子节点必须是黑色的(即没有两个连续的红色节点)。
  5. 黑色节点的数量:从根节点到每个叶节点的路径上,必须包含相同数量的黑色节点。

红黑树的这些规则确保了它在插入和删除元素时,能够保持树的平衡,并且保证查询操作的时间复杂度为 O(log n)。

2.2 红黑树的平衡性

红黑树的自平衡机制使得它在进行插入、删除操作时,能够通过一系列的旋转操作来调整树的结构,保证树的高度不会过高。最坏情况下,红黑树的高度是 O(log n),因此它的查找、插入和删除操作都能在对数时间内完成。

3. TreeMap 和红黑树的关系

3.1 TreeMap 使用红黑树实现

TreeMap 底层实现使用了红黑树,因此它具有红黑树的所有特点和优势:

  • 有序性:由于红黑树是一个有序的二叉搜索树,TreeMap 中的键会始终按照自然顺序或者给定的比较器排序。
  • 时间复杂度:红黑树保证了 TreeMap 的插入、删除和查找操作的时间复杂度为 O(log n)。
  • 自动平衡:红黑树在插入和删除节点时,通过旋转操作保持树的平衡,从而避免了树的高度增长过快,确保了高效的操作性能。

3.2 关键操作实现

  • 插入操作:当向 TreeMap 中插入一个新的键值对时,首先通过红黑树的规则进行插入,并根据需要调整树的结构,确保红黑树的平衡性。

  • 查找操作:通过键的比较,TreeMap 使用红黑树进行快速查找,时间复杂度为 O(log n)。

  • 删除操作:当删除元素时,TreeMap 会通过红黑树的删除操作进行调整,保持树的平衡,时间复杂度为 O(log n)。

3.3 为什么选择红黑树?

  • 保证平衡:红黑树能保证操作的对数时间复杂度,不会像普通的二叉搜索树那样出现退化成链表的情况(最坏情况下变成 O(n))。
  • 稳定性:红黑树的自平衡特性保证了 TreeMap 在多次插入、删除操作后,能够保持较为平衡的结构,确保查找操作的高效性。

4. TreeMap 和 TreeSet 的关系

虽然 TreeMapTreeSet 都是基于红黑树实现的,但它们的用途和内部结构有所不同:

  • TreeMap:是一个键值对的映射结构,存储的是键值对数据,且按照键的顺序进行排序。
  • TreeSet:是 Set 接口的一个实现,存储的只是元素(没有值),并且保证元素的顺序性。

实际上,TreeSet 是通过 TreeMap 来实现的,内部维护了一个空的值。也就是说,TreeSet 在本质上是 TreeMap 的一个“简化版”,只关心键而忽略值。

5. 总结

  • TreeMap 是一个基于红黑树的有序映射类,它存储的是键值对数据,键按照自然顺序或比较器排序。TreeMap 的查找、插入、删除操作都在 O(log n) 时间内完成,这得益于红黑树的自平衡特性。

  • 红黑树 是一种自平衡的二叉搜索树,它通过颜色标记和旋转操作来保证树的平衡性,从而使得查找、插入、删除操作的时间复杂度保持在 O(log n)。

  • TreeMap 利用了红黑树来实现高效的有序映射,因此它具备了红黑树的所有优点,如高效的查找和插入操作、自动平衡性以及保证元素的有序性。

通过对 TreeMap 和红黑树的深入理解,你可以更好地使用 TreeMap,并且了解为什么它能够高效地处理大规模数据,同时保持元素的有序性。在实际开发中,TreeMap 是需要排序的场景下非常理想的数据结构,特别是在要求高效查找和插入的场景下。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。


版权声明:本文由作者原创,转载请注明出处,谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值