Java面试之HashMap的红黑树

红黑树五大性质

1、每个结点或是红色的,或是黑色的
2、根节点是黑色的
3、每个叶结点(NIL)是黑色的
4、如果一个节点是红色的,则它的两个儿子都是黑色的。
5、对于每个结点,从该结点到其叶子结点构成的所有路径上的黑结点个数相同。

在jdk1.8中,hashmap的底层结构,由原来单纯的的数组+链表,更改为链表长度为8时,开始由链表转换为红黑树

1、为什么是红黑树不是二叉平衡树AVL

1、AVL绝对严格平衡,树高差最大为1;红黑树非严格平衡,允许局部不平衡存在

2、因此在查找上,AVL效率比红黑树高一点点

3、但是,对于频繁进行插入删除的操作,AVL旋转调整的次数比红黑树多,红黑树用非严格的平衡来降低插入删除时旋转的次数

2、插入删除过程

https://blog.csdn.net/qq_34173549/article/details/79636764

3、为什么改用红黑树

链表的时间复杂度是O(n),红黑树的时间复杂度O(logn),很显然,红黑树的复杂度是优于链表的

4、为什么不直接用红黑树

为何链表长度为8才转变为红黑树呢?

树节点所占空间是普通节点的两倍,数据内容+指针。综合考虑,认为只能在节点太多的时候,红黑树占空间大这一劣势不太明显的时候,才会舍弃链表,使用红黑树。

5、为什么选择8才会选择使用红黑树

1、根据统计,链表中节点数是8的概率已经接近千分之一,而且此时链表的性能已经很差了。

2、在这种比较罕见和极端的情况下,才会把链表转变为红黑树。因为链表转换为红黑树也是需要消耗性能的

3、大部分情况下,hashmap还是使用的链表,如果是理想的均匀分布,节点数不到8,hashmap就自动扩容了。

参考:

https://blog.csdn.net/qq_34173549/article/details/79636764

https://blog.csdn.net/baidu_37147070/article/details/98785367

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值