首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Java PriorityQueue更改为最大PQ

将Java PriorityQueue更改为最大PQ
EN

Stack Overflow用户
提问于 2010-09-14 11:17:37
回答 4查看 33.1K关注 0票数 22

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

代码语言:javascript
复制
Comparator<Integer> cmp = new Comparator<Integer>()
{
    public int compare( Integer x, Integer y )
    {
        return y - x;
    }
};

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-02 06:15:17

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

Java Reference

票数 24
EN

Stack Overflow用户

发布于 2012-10-01 06:47:58

以下是使用Collections.reverseOrder()的代码片段:

代码语言:javascript
复制
    PriorityQueue<Integer> maxPQ = new PriorityQueue<Integer>(20,Collections.reverseOrder());

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

票数 35
EN

Stack Overflow用户

发布于 2012-04-02 12:57:27

我不知道你所说的优雅是什么意思,但是当我想要像MaxHeap一样实现一个PQ (在Dijkstra中使用)时,我只需要使用一个内联的比较器构造函数。

代码语言:javascript
复制
PriorityQueue<Integer> PQ= new PriorityQueue<Integer>(20, new Comparator<Integer>(){
            public int compare(Integer o1, Integer o2){
                return o2 - o1;
            }
        });

对于任何时候我正在寻找简单的东西,并且只想使用比较器一次,它是足够简单的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3705881

复制
相关文章

相似问题

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