HashMap重要思维导图

HashMap中使用红黑树而非二叉排序树或AVL树,是因为红黑树在插入和删除节点时旋转次数较少,能更快地保持平衡,从而保证了在最坏情况下的操作时间为O(logN)。相比于AVL树的严格平衡,红黑树的非严格平衡允许更大的灵活性,降低了平衡维护的成本。此外,红黑树在删除节点时的效率更高,开销更小,是功能、性能和空间开销之间的良好折衷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请添加图片描述
在这里插入图片描述

HashMap为什么使用红黑树而不是其他的数据结构

回顾一下二叉树的基本内容:

  1. 二叉排序树(查找树)
    若左子树不为空,则左子树上所有结点的值均小于根结点的值。
    若右子树不为空,则右子树上所有结点的值均大于根节点的值。
    左右子树也为二叉排序树
  2. 平衡二叉树(AVL树)
    是一种二叉查找树,当且仅当两个子树的高度差不超过1时,这个树是平衡二叉树
  3. 红黑树
    是许多二叉查找树中的一种,它能保证在最坏的情况下,基本动态集合操作时间为O(lgn)

为什么不使用二叉排序树

在添加元素的时候极端情况下会出现线性结构
eg:由于二叉排序树左子树所有节点的值均小于根节点的特点,如果我们添加的元素都比根节点小,会导致左子树线性增长,这样就失去了用树型结构替换链表的初衷,导致查询时间增长。

为什么不使用平衡二叉树

AVL是严格平衡树,因此在增加or删除节点的时候,根据不同情况,旋转的次数比红黑树要多。
红黑树只要求部分达到平衡,但提出了为节点增加颜色,红黑树是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决。

  • 插入节点导致树失衡
    AVL和RB-Tree都是最多两次树旋转实现复衡rebalance,旋转的量级是O(1)

  • 删除节点导致树失衡
    AVL需要维护从被删除节点到根节点root这条路径上所有节点的平衡,旋转的量级为O(logN)
    RB-Tree最多只需要旋转三次实现复衡,是O(1),删除效率更高,开销更小。

引入RB-Tree是功能、性能、空间开销的折中结果。

红黑树介绍

  • 每个节点都有红色or黑色树的根始终是黑色的
  • 没有两个相邻的红色节点
  • 从节点(包括根)到其任何后代的NULL节点(叶子结点下发挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值