我有整数的Java优先级队列:
PriorityQueue<Integer> pq= new PriorityQueue<Integer>();
当我调用pq.poll()
时,我得到了最小元素。
问:如何更改代码以获得最大元素?
发布于 2012-06-13 03:12:40
这样如何:
PriorityQueue<Integer> queue = new PriorityQueue<>(10, Collections.reverseOrder());
queue.offer(1);
queue.offer(2);
queue.offer(3);
//...
Integer val = null;
while( (val = queue.poll()) != null) {
System.out.println(val);
}
Collections.reverseOrder()
提供了一个Comparator
,它将PriorityQueue
中的元素按相反的顺序排序,在本例中为它们的自然顺序。
发布于 2016-07-10 05:10:33
从Java 8开始就可以使用lambda表达式了。
下面的代码将打印较大的10。
// There is overflow problem when using simple lambda as comparator, as pointed out by Фима Гирин.
// PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
PriorityQueue<Integer> pq =new PriorityQueue<>((x, y) -> Integer.compare(y, x));
pq.add(10);
pq.add(5);
System.out.println(pq.peek());
lambda函数将接受两个整数作为输入参数,将它们相减,然后返回算术结果。lambda函数实现了函数接口Comparator<T>
。(这是就地使用的,而不是匿名类或离散实现。)
发布于 2020-04-13 13:15:39
在Java 8+中,您可以通过以下方法之一创建最大优先级队列:
方法1:
PriorityQueue<Integer> maxPQ = new PriorityQueue<>(Collections.reverseOrder());
方法二:
PriorityQueue<Integer> maxPQ = new PriorityQueue<>((a,b) -> b - a);
方法3:
PriorityQueue<Integer> maxPQ = new PriorityQueue<>((a,b) -> b.compareTo(a));
https://stackoverflow.com/questions/11003155
复制相似问题