Java PriorityQueue首先返回最少的元素

时间:2012-01-24 16:56:37

标签: java data-structures

Java中的PriorityQueue的javadoc说: 此队列的头部是指定排序的最小元素。

有没有人知道这个类是打算用作堆还是恰好适合堆描述? 如果它应该是一个堆,那么我很困惑为什么他们选择通过remove()返回“最少”元素 - 为什么'最少'元素具有最优先权或者像'最大'或者堆中使用的“最旧”元素?

提前致谢

4 个答案:

答案 0 :(得分:6)

堆不一定应该归还最大元素。这样做的堆称为max-sheaps。 Java堆是最小堆,它们是完全相同的结构,除了它们在排序/比较步骤中使用大于号而不是小于号。

在查看source code/documentation for PriorityQueue并浏览JLS之后,我看不到任何指示选择min超过最大值的原因。它可能只是归结为硬币翻转,或者价值组通常从1变为n,其中1是头部和最小值。

答案 1 :(得分:3)

堆有两种,最大堆和最小堆。 Java PriorityQueue使用min-sheaps,因此head / top是最小的元素。

答案 2 :(得分:0)

至于为什么删除最少元素,从快速阅读文档,我会假设优先级1来自优先级2

答案 3 :(得分:0)

优先级队列是一个堆,这是一种常见的误解。 优先级队列是一个抽象概念,如“列表”或“地图”;正如列表可以使用链表或数组实现一样,优先级队列可以使用堆或其他各种方法实现。