温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java集合Queue-PriorityQueue的方法

发布时间:2021-06-22 14:02:39 来源:亿速云 阅读:131 作者:chen 栏目:编程语言

这篇文章主要介绍“Java集合Queue-PriorityQueue的方法”,在日常操作中,相信很多人在Java集合Queue-PriorityQueue的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java集合Queue-PriorityQueue的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

优先队列有两种:最大优先队列,当前最大的元素优先出队;最小优先队列,当前最小的元素优先出队。

PriorityQueue 通过用数组表示的小顶堆来实现,具体结构如下图所示

Java集合Queue-PriorityQueue的方法

首先任何结点都小于其左右子结点,除此之外,对于任何一个结点,假设它的下标为n:

  • 左子结点:2 * n + 1

  • 右子结点:2 * n + 2

  • 父结点:(n + 1) / 2

1 构造

  1. 成员变量

    Java集合Queue-PriorityQueue的方法

  2. 构造函数

    Java集合Queue-PriorityQueue的方法

    看起来有7种实际上只有4种

    Java集合Queue-PriorityQueue的方法

    除了第一种,其它的是对PriorityQueueSortedSet 和其它Collection 进行初始化,其中SortedSet 本身就已经是排好序,所以不需要经过什么特殊处理,而其它的则需要调用heapify()进行处理。

    Java集合Queue-PriorityQueue的方法

    进入heapify() 源码可以看到用到了siftDown() 函数,后面会讲到

    Java集合Queue-PriorityQueue的方法

2 增加

Java集合Queue-PriorityQueue的方法

addoffer 的语义是相同的,add也是调用了offer ,主要的是扩容函数grow 和筛选函数siftUp 。扩容函数后面讲,先来分析筛选函数(siftUp/siftDown)

Java集合Queue-PriorityQueue的方法

Java集合Queue-PriorityQueue的方法

假设待插入的元素是4,这个gif图有个缺陷就是,比较完后,并不是4和待比较的结点交换,而是单纯把父节点移下来。

3 删除

Java集合Queue-PriorityQueue的方法

siftDownsiftUp 差不多,都是包含有比较器和没有比较器两种方法,这里就拿一个分析即可。

Java集合Queue-PriorityQueue的方法

Java集合Queue-PriorityQueue的方法

Java集合Queue-PriorityQueue的方法

4 查询

由于查询并没有涉及结构的变化和调整,所以源码是非常简单的。

Java集合Queue-PriorityQueue的方法

5 扩容

扩容发生在添加元素的时候,当size >= queue.length 的时候就会发生扩容。

Java集合Queue-PriorityQueue的方法

到此,关于“Java集合Queue-PriorityQueue的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI