为什么不选择AVL树?

RB-Tree和AVL树作为BBST,其实现的算法时间复杂度相同,AVL作为最先提出的BBST,貌似RB-tree实现的功能都可以用AVL树是代替,那么为什么还需要引入RB-Tree呢?

  1. 红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。
  2. 就插入节点导致树失衡的情况,AVL和RB-Tree都是最多两次树旋转来实现复衡rebalance,旋转的量级是O(1)
    删除节点导致失衡,AVL需要维护从被删除节点到根节点root这条路径上所有节点的平衡,旋转的量级为O(logN),而RB-Tree最多只需要旋转3次实现复衡,只需O(1),所以说RB-Tree删除节点的rebalance的效率更高,开销更小!
  3. AVL的结构相较于RB-Tree更为平衡,插入和删除引起失衡,如2所述,RB-Tree复衡效率更高;当然,由于AVL高度平衡,因此AVL的Search效率更高啦。
  4. 针对插入和删除节点导致失衡后的rebalance操作,红黑树能够提供一个比较"便宜"的解决方案,降低开销,是对search,insert ,以及delete效率的折衷,总体来说,RB-Tree的统计性能高于AVL.
  5. 故引入RB-Tree是功能、性能、空间开销的折中结果。
    5.1 AVL更平衡,结构上更加直观,时间效能针对读取而言更高;维护稍慢,空间开销较大。
    5.2 红黑树,读取略逊于AVL,维护强于AVL,空间开销与AVL类似,内容极多时略优于AVL,维护优于AVL。
    基本上主要的几种平衡树看来,红黑树有着良好的稳定性和完整的功能,性能表现也很不错,综合实力强,在诸如STL的场景中需要稳定表现。

红黑树的查询性能略微逊色于AVL树,因为其比AVL树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的AVL树最多多一次比较,但是,红黑树在插入和删除上优于AVL树,AVL树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于AVL树为了维持平衡的开销要小得多

总结:实际应用中,若搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。

为什么不选择B树或B+树?

  1. B+树在数据库中被应用的原因就是B+树比B树更加“矮胖”,B+树的非叶子结点不存储数据,所以每个结点能存储的关键字更多。所以B+树更能应对大量数据的情况。
    jdk1.7中的HashMap本来是数组+链表的形式,链表由于其查找慢的特点,所以需要被查找效率更高的树结构来替换。
    如果用B+树的话,在数据量不是很多的情况下,数据都会“挤在”一个结点里面。这个时候遍历效率就退化成了链表

  2. B和B+树主要用于数据存储在磁盘上的场景,比如数据库索引就是用B+树实现的。这两种数据结构的特点就是树比较矮胖,每个结点存放一个磁盘大小的数据,这样一次可以把一个磁盘的数据读入内存,减少磁盘转动的耗时,提高效率。而红黑树多用于内存中排序,也就是内部排序。

HashMap为什么选择红黑树?相关推荐

  1. 【HashMap原理+红黑树】

                    HashMap原理+红黑树 一.HashMap原理 HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上 ...

  2. Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析

    1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...

  3. hashmap中用红黑树不用其他树_为什么hashMap引入了红黑树而不是其他结构

    1.为什么hashMap使用红黑树而不是其他结构? 在回答这个问题之前,我们先了解一下有关二叉树的基本内容. ①二叉排序树(又称二叉查找树): 1)若左子树不为空,则左子树上所有结点的值均小于根结点的 ...

  4. 面试系列Java中级:为什么HashMap引入红黑树?

    因为在JDK1.7之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个数组中的元素较多,即hash值相等的元素较多时,通过key值依次查找 ...

  5. hashmap中用红黑树不用其他树_HashMap面试专题:常问六题深入解析

    引言 其实我很早以前就想写一篇关于HashMap的面试专题.对于JAVA求职者来说,HashMap可谓是集合类的重中之重,甚至你在复习的时候,其他集合类都不用看,专攻HashMap即可. 然而,鉴于网 ...

  6. hashmap转红黑树的阈值为8_面试必问的HashMap,一次彻底帮你搞定HashMap源码

    HashMap结构 数组+链表+红黑树 链表大于8转红黑树,红黑树节点数小于6退回链表. 存放的key-value的Node节点 static class Node implements Map.En ...

  7. hashmap转红黑树的阈值为8_面试必考的 HashMap,这篇总结到位了

    点击蓝色"JavaKeeper"关注我哟加个"星标",一起成长,做牛逼闪闪的技术人 1 概述 HashMap是基于哈希表实现的,每一个元素是一个key-valu ...

  8. 高端的面试从来不会在HashMap的红黑树上纠缠太多

    前言 在一场面试中最能打动面试官的其实是细节,候选人对细节的了解程度决定了留给面试官的印象到底是"基础扎实"还是"基础薄弱",如果候选人能够举一反三主动阐述自己 ...

  9. 为什么HashMap使用红黑树而不使用AVL树

    在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度. 那么很多人就有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树 ...

最新文章

  1. C# Note27: GetHashCode方法
  2. 一个方法可解决两个问题:1:Unity打开时一直加载,不能NEW,只能OPEN; 2:Unity 出现license error,re-active时一直循环报错
  3. ubunut 下关闭apache服务自动启动
  4. PS基础教程[3]如何去除照片上的水印
  5. 阿里技术大神:你没做错啥,你错在啥都没做
  6. 面对人性,有的选择向左,有的向右
  7. Java基础之面向对象的特征。
  8. 突然!新锤子手机系统现身:这是另起炉灶了?
  9. zabbix agent安装_OpenSUSE RPM安装 zabbix-agent
  10. C#文件上传到服务器——转载至wcj1984abc
  11. Atitit 命令指令的分类与权限 IMAP协议为例子 目录 1. 指令的作用的权限吧。 全局命令 未认证状态命令 未认证状态命令 选中状态指令 2 1.1. 1.在任何状态下都有效的指令(全局命
  12. jdbc学习笔记3,blob类型数据的操作,preparedstatement的批量操作,数据库的事务,以及事务的特性,隔离权限的修改
  13. c语言msgbox函数,msgbox函数的返回值类型为什么
  14. 互联网巨头追捧的“中台”战略,有多重要?
  15. 苹果最新发布的16 英寸 MacBook Pro有哪些亮点和不足之处?
  16. 在线教育20年:在线教育的未来发展趋势
  17. Chem 3D软件可以改变背景吗
  18. 踩坑sunbeam rbt 去除host reads
  19. Pytorch实现nms (torchvision.ops.nms torchvision.ops.boxes.batched_nms)
  20. 截流式合流制设计流量计算_[2018年最新整理]合流制排水管网设计与计算.ppt

热门文章

  1. Nifi的主要优缺点
  2. 背书快背崩溃了!还是背了忘,怎么办!
  3. java sdk下载_Java SDK的下载、安装和环境配置
  4. Google Logo 美国粘土动画大师 90年诞辰
  5. hdu-6681 Rikka with Cake
  6. 【计算机视觉】相机标定
  7. 追踪Linux TCPIP代码运行,01.追踪linux代码运行——socket创建
  8. HCIP-H12-221多选题库(3)
  9. “梗文化”盛产2000w+播放,快手主播又多一个出圈技能?
  10. 七牛云存储之覆盖上传