常见数据结构与set底层

1、栈结构

	先进后出、无论出栈还是入栈都是在栈顶

2、队列

	简称队,先进先出

3、数组

查询快、增删慢 ; 有索引
	查询快:数组在内存中存储地址是连续的,每个元素所占大小是固定的,可以通过首地址+便宜 快速定位到制定元素
	增删慢: 增删操作需要移动大量的元素

4、链表

查询慢、增删快;分单链表和双链表(LinkedList底层双链表)
	查询慢:存储地址不连续,所以不能根据计算地址来获取元素
	增删快:无需移动元素、只是修改指针域的数据

链表

5、树

名词含义
节点树中的一个元素
节点的度节点用友子树的个数
叶子节点度为0的节点,也称为终端节点
高度叶子节点高度为1,叶子节点的父节点为2,根节点最高
根节点在第一层,以此类推
父节点
子节点
兄弟节点拥有共同父节点

二叉树(树的一种)

	树中的每个节点的子节点不超过2
二叉查找树(二叉树的一种)
1、左子树上所有节点的值均小于根节点的值
2、右子树上所有节点的值均大于根节点的值
3、每一个子节点最多有2个子树(二叉树特点)
	遍历元素可以按照“左中右”的顺序遍历,查找时可能会出现“瘸子”现象(只有左树没有右树,层树太多;层数越多,查询越慢)
平衡二叉树(二叉树的一种)
	左右两个子树高度差绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
旋转
左旋:将节点的右支往左拉,右子节点变成父节点,并把晋升后多余的左子节点让出给降级节点的右子节点

右旋:将节点的左支往右拉,左子节点变成父节点,并把晋升后多余的右子节点让出给降级节点的左子节点

由于在构建平衡二叉树的时候,当有新节点插入时,都会判断插入后时候平衡,这说明了插入新节点前,都是平衡的,也即高度差绝对值不会超过1。当新节点插入后,有可能会有导致树不平衡,这时候就需要进行调整,而可能出现的情况就有4种,分别称作左左,左右,右左,右右

	左左:根的左节点的左节点下增加节点,方法:根节点右旋
	左右:根的左节点左旋,变成左左,再根节点右旋
	右左:根的右节点右旋,变成右右,再根节点左旋
红黑树
一种自平衡的二叉查找树,太难
并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。

6、Set

特点:无序、值不重复、没有索引

HashSet

Set底层结构:哈希表,由数组+链表+红黑树组成

在这里插入图片描述

存数据:先通过hashCode()计算哈希值决定放在数组的哪个位置,如果此哈希值位置有值了,通过equals()比较两个值是否相同,如果相同则不让添加,如果不同则往下加入链表,链表长度超过8则该链表转变成红黑树(从1.8开始),提高查询效率

LinkedHashSet

链表和哈希表组合的一个数据存储结构,让数据有序

TreeSet

底层依赖于TreeMap,是一种基于红黑树的实现,其特点为:

  1. 元素唯一
  2. 元素没有索引
  3. 使用元素的自然顺序对元素进行排序,或者根据创建 TreeSet 时提供的 Comparator 比较器进行排序
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值