在Java中,我应该为首先返回最大元素的PriorityQueue使用什么?
题
Java的 PriorityQueue 地方列表顶部的最小元素,但我需要它将最大元素放在头部。什么是获得行为优先级队列的最佳方法。
由于我编写了存储在此队列中的类,因此我可以简单地反转compareTo
的结果,它不在此队列之外使用。
然而,我喜欢让代码准确地表示我正在建模的东西,我想要做的是先获得最大的代码,所以代码应该说,而不是至少首先使用不同寻常的定义。
[编辑]快点谢谢大家,一旦我自学了如何写一个,比较器听起来就像我需要的那样。
解决方案
传递 Comparator 在实例化 PriorityQueue 。
它看起来像这样:
public class ReverseYourObjComparator implements Comparator<YourObj> {
public int compare(final YourObj arg0, final YourObj arg1) {
return 0 - arg0.compareTo(arg1);
}
}
其他提示
您基本上可以在您的问题中找到解决方案:您可以传递比较器到 PriorityQueue 。比较者将影响订购商品的方式。
我只是使用比较器。这样,排序顺序仅在您的队列中使用,而不是附加到您的类。
只需通过构造函数提供PriorityQueue
自定义Comparator<? super E>
并更改元素的顺序。
来自javadocs:
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
要添加到比较者评论,请查看:
Collections.reverseOrder();
关于PriorityQueue的api文档说:<!> quot;此队列的头部是指定排序<!>“;的最小元素。因此,至少的定义是基于您的特定顺序的主观,这就是您可以选择提供比较器的原因。
不隶属于 StackOverflow