如何修复 Java Priority-Queue 以按特定属性正确排序?

Posted

技术标签:

【中文标题】如何修复 Java Priority-Queue 以按特定属性正确排序?【英文标题】:How do I fix a Java Priority-Queue to correctly sort by a specific property? 【发布时间】:2011-04-05 20:33:57 【问题描述】:

我有一个 Java PriorityQueue,用于对我创建的名为 Node 的特定类中的对象进行排序。我希望它通过 getData() 方法对节点进行排序。我尝试了以下代码(使用比较器),但它不起作用。当我调用优先级队列的“poll”方法时,它并没有首先返回最低的结果,而是以看似随机的顺序。我如何解决它?谢谢!

PriorityQueue<Node> pq = new PriorityQueue<Node>(hm.size(),
        new Comparator<Node>( ) 
            // override the compare method
            public int compare(Node i, Node j) 
                if (i.getData()<j.getData())
                                        return i.getData(); //It should sort by the Node's getData method.
                                    
                                    return j.getData();

【问题讨论】:

“无效”是什么意思?您的输入和输出是什么,预期输出是什么? 【参考方案1】:

comparator 需要返回 -1(负数)、0 或 +1(正数),具体取决于第一个操作数是小于、等于还是大于第二个操作数。您返回的数据本身不会做您想做的事情。

【讨论】:

【参考方案2】:

重写比较方法:

public int compare(Node i, Node j) 
  return i.getData() - j.getData()

这将遵循比较方法的要求,根据比较结果返回值小于、等于或大于零。

【讨论】:

从 OOP 的角度来看 - 是的,但是我的意思是“在代码中你提供了比较方法的更改内容”。 顺便说一下,它很容易被整数溢出。

以上是关于如何修复 Java Priority-Queue 以按特定属性正确排序?的主要内容,如果未能解决你的问题,请参考以下文章

Priority-Queue模式

Priority-Queue模式

stl——容器适配器

如何修复无法启动活动 ComponentInfo.....:java.lang.NullPointerException [重复]

如何修复netbeans中的java语言级别错误

java:如何修复 Unchecked cast 警告