JAVA 15

 动态绑定和静态绑定的区别:

一个方法在编译时期解析,就称之为静态绑定,如果在运行时期解析,就称之为动态绑定

1,静态绑定在编译时期,动态绑定在运行时期

2,静态绑定只用到类型信息,方法的解析根据引用变量的类型决定,而动态绑定则根据实际引用的对象决定

3,在java中,private static 和fianl 方法都是静态绑定的,

4,多态是通过动态绑定实现的


                           红黑树

红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树,

平衡二叉树的左右子树高度差不能超过1,每次进行插入删除时,几乎都需要通过旋转操作保持平衡

这就导致了性能大打折扣:

红黑树通过牺牲一定的平衡性,减少了旋转操作,提高了性能,插入时的不平衡,不超过两次旋转就可以解决,删除时的不平衡,不超过三次旋转就能解决,保证最坏的情况下,也能在o(log2N)时间内完成查找操作

特点: 根节点时黑色,所有的叶子节点都是nul节点且为黑色,同一路径,不存在联系的红色节点

每个节点到叶子节点的所有路径,都包含相同数目的黑色节点(相同的黑色高度)

java中,TreeMap,TreeSet,HashMap都用了红黑树做为底层数据结构,当冲突的链表长度超过8时,自动转换为红黑树

class RedBlackTreeNode {
    public int val;
    public RedBlackTreeNode left;
    public RedBlackTreeNode right;
    // 记录节点颜色的color属性,暂定true表示红色
    public boolean color;
    // 为了方便迭代插入,所需的parent属性
    public RedBlackTreeNode parent;

    // 一些构造函数,根据实际需求构建
    public RedBlackTreeNode() {
    }
}

当红黑规则不满足时,需要对节点进行变色或者旋转操作

红黑树的左旋 :

这里写图片描述

 红黑树的右旋:

这里写图片描述

红黑树新增节点的规则:

新插入的节点默认为红色因为插入黑色节点会影响黑色高度,对红黑树的影响更大 

右子树的黑色高度降低,因此需要右旋,以恢复右子树的黑色高度 

一切的操作都是为了保持红黑树的特点,保持红黑树的性质

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值