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;此队列的头部是指定排序<!>“;的最小元素。因此,至少的定义是基于您的特定顺序的主观,这就是您可以选择提供比较器的原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top