Treeset 和 priorityQueen的 区别和一点解析

区别

----数据结构是否重复的元素是否有序
Treeset二叉搜索树不允许
PriorityQueue允许

treeset

image.png

treeset 底层其实是调用 treemap,等于放到 treemap 中的 key 部分

而且是无序的,进出时间不确定
但是因为是二叉搜索树,因此在数值上是有序的

可以通过重写 Comparable 或者 comparator 来更改排序
ps:

  1. 当比较规则不会发生改变时(比较规则只有1个的时候),可实现 Comparable 接口
  2. 如果比较规则有多个,并且需要多个比较规则之间频繁切换,可使用 Comparator 接口
二叉搜索树

性质

  • 若左子树不为空,则左子树上所有结点的值均小于它的根结点的值
  • 若右子树不为空,则右子树上所有结点的值均大于它的根结点的值
  • 左、右子树也分别为二叉排序树
    小放左,大放又
    序列 [7, 3, 10, 12, 5, 1, 9] 以二叉排序树存储的结构如图:

image.png

PriorityQueue

优先级队列: 队列是先进先出,而优先级队列就是把优先级最高的先出。

image.png
image.png
image.png

含义: 如果有一个关键码的集合 K = {k0 , k1 , k2 , … , kn-1} ,把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中并满足: Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0 , 1 , 2… ,则称为小堆 ( 或大堆) 。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

性质:堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。

fa2cbc4f683c46758ab4ed2b98bd1f07.png

堆的构建是冒泡构建

  1. 从后遍历每一个树,如果比父节点小(或者大),就和父亲交换,因为是数组储存,因此是 o (n)
  2. 调整(o( l o g 2 ( n ) log_2(n) log2(n)))
    heap.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值