Java Comparable在Java PriorityQueue中不起作用(PriorityQueue未根据特定字段排序)

时间:2014-02-12 18:34:27

标签: java priority-queue comparator comparable

我试图在优先级队列中推送一些对象,我希望它们根据pathCost进行排序,这样最低的pathCost将始终位于队列的顶部。

    Queue<Node> frontier = new PriorityQueue<>(7, Node.pathComparator);
    Node n1 = new Node("z");n1.setPathCost(13);
    Node n2 = new Node("a");n2.setPathCost(12);
    Node n3 = new Node("f");n3.setPathCost(65);
    Node n4 = new Node("h");n4.setPathCost(10);

    frontier.add(n1);
    frontier.add(n2);
    frontier.add(n3);
    frontier.add(n4);

    System.out.println(frontier);

以下是我的Node类中Comparable的实现:

@Override
public int compareTo(Node node) {
    return (this.pathCost - node.pathCost);
}

public static Comparator<Node> pathComparator = new Comparator<Node>() {

    @Override
    public int compare(Node n1, Node n2) {
    return (int) (n1.getPathCost() - n2.getPathCost());
    }
};

输出队列时,它不会根据pathCost进行排序!有谁知道问题出在哪里? 我的输出:[h,a,f,z]

0 个答案:

没有答案