首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将priorityQueue更改为最大优先级队列

将priorityQueue更改为最大优先级队列
EN

Stack Overflow用户
提问于 2012-06-13 03:05:59
回答 16查看 255.8K关注 0票数 158

我有整数的Java优先级队列:

 PriorityQueue<Integer> pq= new PriorityQueue<Integer>();

当我调用pq.poll()时,我得到了最小元素。

问:如何更改代码以获得最大元素?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 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中的元素按相反的顺序排序,在本例中为它们的自然顺序。

票数 278
EN

Stack Overflow用户

发布于 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>。(这是就地使用的,而不是匿名类或离散实现。)

票数 98
EN

Stack Overflow用户

发布于 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)); 
票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11003155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档