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

时间:2011-04-05 20:33:57

标签: java priority-queue comparator

我有一个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();

2 个答案:

答案 0 :(得分:8)

comparator需要返回-1(负数),0或+1(正数),具体取决于第一个操作数是小于,等于还是大于第二个操作数。您正在返回无法执行所需操作的数据。

答案 1 :(得分:4)

重写比较方法:

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

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