1.引言 HashMap的基本结构是数组,链表和红黑树。以数组为基本形态,数组中的元素先以链表形式储存,当链表的长 度超过8时(包含数组上的那个链表头)就会将链表转换为红黑树,以加快修改和查询效率。当然除了HashMap还 有很多地方都会用到红黑树,理解红黑树的原理还是比较重要的。 2.概念与由来 红黑树的本质是二叉树,二叉树在插入元素的时候是根据关键字(可以理解为用来识别每个节点的id,一般是hash 来判断)的大小来判断插入到哪一个分支的,如下图所示: (备注:大写字母代表每个节点相当于每个节点的名字没有实际意义在本文中方便文字说明,数字代表每个节点的 关键字的大小有实际意义) 红黑树是一种自平衡二叉查找树,它在Java中被广泛应用于数据结构如HashMap、TreeMap等。红黑树的引入主要是为了提高查找、插入和删除操作的效率,尤其是在大规模数据操作时。 1. 红黑树的特性: - 每个节点要么是红色,要么是黑色。 - 根节点是黑色。 - 所有叶子节点(NIL或空节点)是黑色。 - 如果一个节点是红色,那么它的两个子节点都是黑色(这条规则也被称为“红色节点不能相邻”)。 - 对每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点,即黑色高度相同。 2. 插入操作: - 新插入的节点通常是红色,以避免立即违反第四条规则。如果插入的节点是黑色,每次插入都可能导致不平衡,需要频繁调整。 - 插入过程中,可能需要进行颜色变换和旋转操作以保持红黑树的性质。旋转包括左旋和右旋,用于调整树的结构以达到平衡。 3. 旋转机制: - 右旋:当需要平衡树时,将某个节点及其子节点逆时针旋转,保持红黑树的性质。 - 左旋:同理,顺时针旋转以保持平衡。 4. 插入过程示例: - 插入第一个节点,若违反规则,通常会将其变为黑色。 - 若插入节点的父节点和叔叔节点均为红色,会改变颜色并可能进行旋转。 - 在某些情况下,需要同时改变父节点、叔叔节点和祖父节点的颜色,以及进行旋转操作。 5. 为什么使用红黑树: - 平衡性:红黑树通过特定的平衡策略,确保了在最坏的情况下,查找、插入和删除的时间复杂度仍为O(log n),显著优于普通二叉查找树的O(n)。 - 灵活性:插入新节点时,通过颜色变换和旋转,可以在不破坏整体结构的情况下,保持树的平衡,提高了效率。 6. 在HashMap中的应用: - 当链表长度超过8时,HashMap会将链表转换为红黑树,以提高查询和修改速度,尤其是在高并发环境下。 理解红黑树的工作原理对于深入学习Java集合框架和数据结构至关重要,因为它在很多关键的性能优化场景中扮演着核心角色。掌握红黑树的插入、删除和查找操作,以及如何通过颜色规则和旋转来保持树的平衡,是提升编程技能的关键步骤。
剩余10页未读,继续阅读
- 粉丝: 13
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务+生产功能
- C#ASP.NET口腔门诊会员病历管理系统源码 门诊会员管理系统源码数据库 SQL2008源码类型 WebForm
- 灰狼优化算法(Grey Wolf Optimizer,GWO)是一种群智能优化算法
- 基于 promise 的网络请求库,可以运行 node.js 和浏览器中 本库基于Axios 原库v1.3.4版本进行适配
- JAVA的SpringBoot宠物医院管理系统源码数据库 MySQL源码类型 WebForm
- 基于Huawei LiteOS内核演进发展的新一代内核,Huawei LiteOS是面向IoT领域构建的轻量级物联网操作系统
- STM32Fxx英文参考手册 + Jlink下载教程
- 本仓提供了HarmonyOS NEXT开源组件市场工具,这是一个开源的插件,可以直接安装在DevEco Studio中
- 贪心算法 - 数据结构与算法
- C#ASP.NET网络进销存管理系统源码数据库 SQL2008源码类型 WebForm