将优先级队列更改为最大优先级队列
2022-08-31 06:57:06
我在整数的Java中有优先级队列:
PriorityQueue<Integer> pq= new PriorityQueue<Integer>();
当我调用时,我得到最小元素。pq.poll()
问:如何更改代码以获得最大元素?
我在整数的Java中有优先级队列:
PriorityQueue<Integer> pq= new PriorityQueue<Integer>();
当我调用时,我得到最小元素。pq.poll()
问:如何更改代码以获得最大元素?
怎么样像这样:
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);
}
提供了 一个,在这种情况下,它将按 oposite 顺序对 中的元素进行排序,使其自然顺序。Collections.reverseOrder()
Comparator
PriorityQueue
从 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 函数将两个 Integer 作为输入参数,相互相减,然后返回算术结果。lambda 函数实现功能接口 。(这是就地使用的,而不是匿名类或离散实现。Comparator<T>