十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“Java集合Queue-PriorityQueue的方法”,在日常操作中,相信很多人在Java集合Queue-PriorityQueue的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java集合Queue-PriorityQueue的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的田阳网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
优先队列有两种:最大优先队列,当前最大的元素优先出队;最小优先队列,当前最小的元素优先出队。
PriorityQueue
通过用数组表示的小顶堆来实现,具体结构如下图所示
首先任何结点都小于其左右子结点,除此之外,对于任何一个结点,假设它的下标为n:
左子结点:2 * n + 1
右子结点:2 * n + 2
父结点:(n + 1) / 2
成员变量
构造函数
看起来有7种实际上只有4种
除了第一种,其它的是对PriorityQueue
、SortedSet
和其它Collection
进行初始化,其中SortedSet
本身就已经是排好序,所以不需要经过什么特殊处理,而其它的则需要调用heapify()
进行处理。
进入heapify()
源码可以看到用到了siftDown()
函数,后面会讲到
add
和offer
的语义是相同的,add
也是调用了offer
,主要的是扩容函数grow
和筛选函数siftUp
。扩容函数后面讲,先来分析筛选函数(siftUp/siftDown)。
假设待插入的元素是4,这个gif图有个缺陷就是,比较完后,并不是4和待比较的结点交换,而是单纯把父节点移下来。
siftDown
和siftUp
差不多,都是包含有比较器和没有比较器两种方法,这里就拿一个分析即可。
由于查询并没有涉及结构的变化和调整,所以源码是非常简单的。
扩容发生在添加元素的时候,当size >= queue.length
的时候就会发生扩容。
到此,关于“Java集合Queue-PriorityQueue的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!