我需要一个Max-Priority Queue
数据结构。
查看Java的Priority Queue我注意到它是Min-Priority Queue
。
来自javadoc:
这个队列的头部是关于的队列中最少的元素 指定的排序
我看到可以选择提供自定义Comparator
,并查看一些建议使用的帖子并进行反向比较以获得Max Priority Queue
的结果。
这在我看来虽然是“丑陋的黑客”,也许并不直观。
这是从Java标准集合中获得Max-Priority Queue
的唯一方法吗?
是否有一个我错过的更合适的对象? (例如,前一阵子我没有意识到Stack
被Deque
替换了......我的坏人
答案 0 :(得分:7)
AFAIK,是的,这是拥有你想要的东西的最佳方式。我真的不明白这是一个丑陋的黑客。如果只有一个就足够了,那就没有必要提供两个不同的类。如果我们按照你的推理,我们会有一个MinTreeSet和一个MaxTreeSet,一个MinTreeMap和一个MaxTreeMap等,所有这些都完全相同。这是战略模式的经典用法。
只需使用Collections.reverseOrder()
来获得一个比较器,它按自然顺序的相反顺序进行比较。
答案 1 :(得分:2)
这不是Min-Heap。你错误地解释了这一部分:
这个队列的头部是关于的队列中最少的元素 指定的排序。
重点是指定排序。这可以是任何事情,包括降序比较。提供你自己的比较器是它应该如何使用它,它绝对不是一个“丑陋的黑客”。
刚开始时:
此队列根据指定的顺序对元素进行排序 施工时间,根据其规定 自然顺序(见可比较),或根据比较器, 取决于使用的构造函数。
这清楚地表明提供自己的比较器是预期的行为。