红黑树详解

hashmap数据结构

jdk 在 1.8 版本对 hashmap 的数据结构做了一次改动,即是当底层数据节点对应的链表长度大于等于 8 的时候,会把当前节点对应的链表转成红黑树,当红黑树的节点总数小于等于 6 的时候,又会把节点对应的红黑树结构转成链表。链表转成红黑树的阈值为 8 ,红黑树转成链表的阈值为 6 ,两个阈值相差 2 这样设计的目的是防止链表与红黑的频繁转换降低 hashmap 的性能。无论是对节点的增删改查,红黑树的性能都是比链表要高很多的。所以,我们只要了解红黑树是怎样的结构,即可了解 hashmap1.8 是怎样的结构。

红黑树特点:

红黑树可以理解成升级版的二叉树,那为什么 hashmap1.8 在链表长度大于等于 8 的时候转成二叉树呢?因为二叉树有一个致命的缺点,那就是如果插入的数据是有序的话,那么所有的节点结构就会是一个链表而不是二叉树。比如假设头节点为 1 ,新增的节点都是依次增大的比如 2,3,4…,那么所有的新增的节点添加到二叉树的最右边,那么此时这个二叉树就是一个链表而不是二叉树,就失去了二叉树的特性变得没有意义。再有就是新增的节点如果是非均匀的话,那么二叉树是不平衡的,不平衡的二叉树相对红黑树(均匀的二叉树)性能是差很多的,综上所述所以 hashmap1.8 是使用了红黑树结构。红黑树只要理解三点即可理解它的内部结构,前提是你要对二叉树有所了解。第一红黑树节点 Node 新增一个boolean 用来标识该节点是红色节点还是黑色节点;第二红黑树在节点总数发生改变的时候会进行自我调节(也就是左旋或者右旋),以保证是一棵平衡的树(左边的节点约等于右边的节点)进行自我调节的判断条件是节点的颜色;第三是进行自我调节的时候部分节点的颜色会发生改变;第四进行自我调节的场景都是固定的,即是节点的颜色符合自我调节的情况红黑树才会进行自我调节。

参考博客(很好的一篇红黑树的文章):https://blog.csdn.net/eson_15/article/details/51144079

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值