么是红黑树?

红黑树

红黑树是jdk1.8引入的新概念.

拉链法
在Java中保存数据有两种数据结构:数组和链表.
其中,数组的特点是,寻址容易,查找的效率高(索引),插入删除的效率低(影响数组所有元素索引).
而链表的特点与数组恰恰相反,插入删除的效率高(只需要修改节点的引用指向),查找的效率低(每次都是从头开始);
所以我们将数组和链表结合起来使用,发挥两者各自的优势.这种方式就被称为拉链法

HashMap jdk1.8之前采用的就是拉链法.

这就需要了解一下HashMap的底层

HashMap是基于哈希表的Map接口的非同步实现的,此实现提供所有可选的映射操作.
HashMap实际上就是一个"链表散列"的数据结构,即数组和链表的结合体.
HashMap是基于哈希算法实现的.

当我们往HashMap中put元素时:

  1. 利用key的hashcode进行hash运算.计算出当前元素在数组的下标.

  2. 存储时如果出现哈希值相同的key:
    如果key相同,则覆盖原始值
    如果key不同(出现冲突),则将当前key-value放入链表中.

  3. 获取元素值时也是拿key的hash值找到下标元素,进一步判断key是否相同(equals),从而得到对应值.

  • 理解了以上过程就能明白HashMap是如何解决hash冲突了,核心就是数组存储方式,然后将冲突的key的对象放入链表中存储.
    在这里插入图片描述

在jdk1.8之后在解决冲突时就有了很大的变化,当链表的长度大于阈值(默认为8)就将链表转为红黑树减少搜索时间.并且插入方式也发生了改变由8之前的头插法变为8之后的尾插法
在这里插入图片描述
前戏搞得那么多,终于要进入正题了
有人要问了什么是红黑树呢.红黑树其实就是一颗特殊的二叉树.那什么是二叉树呢,二叉树就是一种数据结构,每个节点关联两个子节点.你要问什么是树的话,你可出门去个公园看看.
红黑树特殊在它的节点分为两种颜色红色和黑色,

  1. 根节点和叶子结点[这里的叶子节点代表的是终节点/结尾的节点并且为空]是黑色.
  2. 如果一个节点为红色,它的子节点必黑.
  3. 每个节点到叶子节点所经过的黑色节点数相同.
    所以当插入了新的节点就会破坏以上三条性质,使其变为普通的树,而通过旋转和变色可以使这颗树重新变为红黑树,旋转和变色的目的也是让树保持红黑树的特性.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值