priorityQueue 堆

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了priorityQueue 堆相关的知识,希望对你有一定的参考价值。

priorityQueue 通过add方法添加,通过poll方法一次获得一个最小元素(元素需要实现Comparable或提供Comparator的实现类),实现原理最小堆,也就是说元素按照最小堆结构存放。

最小堆是一个完全二叉树结构(满足第i个节点的左child索引是2i+1,右child索引是2i+2,父节点为i-1/2),且父节点小于左右两个子节点。

一开始如果有一些数据则需要构建最小堆结构,可参看priorityQueue类的heapify方法

提取最小元素后需要重建最小堆结构,用数组最后一个元素代替第一个元素,然后进行最小堆结构调整,参看siftDown方法

添加元素时,将改元素放到数组最后一个元素,然后进行最小堆结构调整,参看siftUp方法

至于里有最小堆排序,第一步构建一个最小堆,则数组的第一个元素是最小元素,然后使之与最后一个元素互换位置,则最后一个元素为最小元素,然后排除最后一个元素,使用第一个到倒数第二个元素进行最小堆结构调整,得到第一个元素是最小元素,然后使之与倒数第二个元素互换,然后再排除倒数第二个元素,用第一元素到倒数第三个元素构建最小堆,如此循环,最后该数组是就是降序排列了。

以上是关于priorityQueue 堆的主要内容,如果未能解决你的问题,请参考以下文章

priorityQueue 堆

Java使用二叉堆创建HeapPriorityQueue来实现PriorityQueue

PriorityQueue原理分析——基于源码

java的 的priorityqueue 默认是最小堆吗

更新元素后重新堆化 java.util.PriorityQueue

Java集合数据结构——优先级队列 (堆PriorityQueue)