Java标准集合中的最大优先级队列。有吗?

时间:2012-01-21 11:13:48

标签: java collections queue priority-queue

我需要一个Max-Priority Queue数据结构。

查看Java的Priority Queue我注意到它是Min-Priority Queue

来自javadoc:

  

这个队列的头部是关于的队列中最少的元素   指定的排序

我看到可以选择提供自定义Comparator,并查看一些建议使用的帖子并进行反向比较以获得Max Priority Queue的结果。
这在我看来虽然是“丑陋的黑客”,也许并不直观。

这是从Java标准集合中获得Max-Priority Queue的唯一方法吗? 是否有一个我错过的更合适的对象? (例如,前一阵子我没有意识到StackDeque替换了......我的坏人

2 个答案:

答案 0 :(得分:7)

AFAIK,是的,这是拥有你想要的东西的最佳方式。我真的不明白这是一个丑陋的黑客。如果只有一个就足够了,那就没有必要提供两个不同的类。如果我们按照你的推理,我们会有一个MinTreeSet和一个MaxTreeSet,一个MinTreeMap和一个MaxTreeMap等,所有这些都完全相同。这是战略模式的经典用法。

只需使用Collections.reverseOrder()来获得一个比较器,它按自然顺序的相反顺序进行比较。

答案 1 :(得分:2)

这不是Min-Heap。你错误地解释了这一部分:

  

这个队列的头部是关于的队列中最少的元素   指定的排序。

重点是指定排序。这可以是任何事情,包括降序比较。提供你自己的比较器是它应该如何使用它,它绝对不是一个“丑陋的黑客”。

刚开始时:

  

此队列根据指定的顺序对元素进行排序   施工时间,根据其规定   自然顺序(见可比较),或根据比较器,   取决于使用的构造函数。

这清楚地表明提供自己的比较器是预期的行为。