HashMap重要思维导图

Posted 耳冉鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap重要思维导图相关的知识,希望对你有一定的参考价值。


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节点(叶子结点下发挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点

以上是关于HashMap重要思维导图的主要内容,如果未能解决你的问题,请参考以下文章

HashMap重要思维导图

HashMap重要思维导图

HashMap思维导图

《梁宁·产品思维30讲》精华总结

Scala思维导图

三十万字算法宝典,100张思维导图,Github上这份干货太棒了