红黑树五大性质
1、每个结点或是红色的,或是黑色的
2、根节点是黑色的
3、每个叶结点(NIL)是黑色的
4、如果一个节点是红色的,则它的两个儿子都是黑色的。
5、对于每个结点,从该结点到其叶子结点构成的所有路径上的黑结点个数相同。
在jdk1.8中,hashmap的底层结构,由原来单纯的的数组+链表,更改为链表长度为8时,开始由链表转换为红黑树
1、为什么是红黑树不是二叉平衡树AVL
1、AVL绝对严格平衡,树高差最大为1;红黑树非严格平衡,允许局部不平衡存在
2、因此在查找上,AVL效率比红黑树高一点点
3、但是,对于频繁进行插入删除的操作,AVL旋转调整的次数比红黑树多,红黑树用非严格的平衡来降低插入删除时旋转的次数
2、插入删除过程
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