将 Java 优先级队列更改为最大 PQ

2022-09-02 00:11:27

Java标准库中的优先级队列实现似乎是一个最小优先级队列,我发现这有点令人困惑。为了将其转换为最大对象,我创建了一个自定义比较器对象。

Comparator<Integer> cmp = new Comparator<Integer>()
{
    public int compare( Integer x, Integer y )
    {
        return y - x;
    }
};

我想知道是否有更优雅的解决方案。从本质上讲,我不想要一个可用于实现Dijkstras等的通用优先级队列。我甚至没有意识到会有反向操作的:/


答案 1

下面是一个代码片段,使用Collections.reverseOrder()-

    PriorityQueue<Integer> maxPQ = new PriorityQueue<Integer>(20,Collections.reverseOrder());

您还需要提供优先级队列的初始容量(此处为 20)以及比较器。


答案 2

使用Java的比较器。Collections.reverseOrder()

Java 参考


推荐