Java标准库中的优先级队列实现似乎是一个最小优先级队列,我发现这有点令人困惑。为了把它变成一个最大值,我创建了一个自定义的比较器对象。
Comparator<Integer> cmp = new Comparator<Integer>()
{
public int compare( Integer x, Integer y )
{
return y - x;
}
};我想知道有没有更优雅的解决方案。本质上,我不想要一个可以用来实现Dijkstras等的通用优先级队列。我甚至没有意识到会有反向操作的队列:/
发布于 2011-12-02 06:15:17
使用Java的Collections.reverseOrder()比较器。
Java Reference
发布于 2012-10-01 06:47:58
以下是使用Collections.reverseOrder()的代码片段:
PriorityQueue<Integer> maxPQ = new PriorityQueue<Integer>(20,Collections.reverseOrder());您还需要提供优先级队列的初始容量(此处为20)以及比较器。
发布于 2012-04-02 12:57:27
我不知道你所说的优雅是什么意思,但是当我想要像MaxHeap一样实现一个PQ (在Dijkstra中使用)时,我只需要使用一个内联的比较器构造函数。
PriorityQueue<Integer> PQ= new PriorityQueue<Integer>(20, new Comparator<Integer>(){
public int compare(Integer o1, Integer o2){
return o2 - o1;
}
});对于任何时候我正在寻找简单的东西,并且只想使用比较器一次,它是足够简单的。
https://stackoverflow.com/questions/3705881
复制相似问题