2021-11-05 java集合

本文探讨了Java中数组的高效访问,链表的灵活性,以及平衡二叉树(包括红黑树)的原理、规则和平衡方法。理解这些概念对于高效编程至关重要,尤其是在处理数据结构和算法优化时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

特点:
A.内存地址连续,
B.可以通过下标的成员访问,下标访问的性能高
C.增删操作带来更大的性能消耗(保证数据越界的问题,需动态扩容)

链表

特点:
A.灵活的空间要求,存储空间不要求连续
B.不支持下标的访问.支持顺序的遍历搜索
C.针对增删操作找到对应的节点改变链表的头尾指向即可,无需移动元素存储位置

平衡二叉树

二叉树具有如下的特点
(1)某节点的左子树节点值仅包含小于该节点值
(2)某节点的右子树节点值仅包含大于该节点值
(3)左右子树每个也必须是二叉查找树
(4)顺序排列

不平衡二叉树

   查询效率不高,解决办法去除顶端,让侧边慢慢强壮和平衡,红黑树其实就是去除二叉树顶端优势的解决方案

红黑树

红黑树是一个自平衡【不是绝对平衡】的二叉查找树

红黑树节点的规则

性质1:每个节点要么是黑色,要么是红色。
性质2:根节点是黑色。
性质3:每个叶子节点(NIL)是黑色。
性质4:每个红色结点的两个子结点一定都是黑色。
性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点
红黑树练习网站:http://algoanim.ide.sk/index.php?page=showanim&id=63

红黑树平衡方法

三种操作:左旋,右旋,变色

左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,
      右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。
      
右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,
左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。

变色:结点的颜色由红变黑或由黑变红。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值