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

Java Comparable在Java PriorityQueue中不起作用(PriorityQueue未根据特定字段排序),java,priority-queue,comparator,comparable,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

我试图将某些对象推送到优先级队列中,我希望它们根据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);
Queue frontier=new PriorityQueue(7,Node.pathComparator);
节点n1=新节点(“z”);n1.设置路径成本(13);
节点n2=新节点(“a”);n2.设定路径成本(12);
节点n3=新节点(“f”);n3.设置路径成本(65);
节点n4=新节点(“h”);n4.设置路径成本(10);
添加(n1);
添加(n2);
边界。添加(n3);
边界。添加(n4);
系统输出打印(边界);
以下是我的节点类中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());
    }
};
@覆盖
公共整数比较(节点){
返回(this.pathCost-node.pathCost);
}
公共静态比较器pathComparator=新比较器(){
@凌驾
公共整数比较(节点n1、节点n2){
返回(int)(n1.getPathCost()-n2.getPathCost());
}
};
输出队列时,它不会根据pathCost进行排序!有人知道问题出在哪里吗?
我的输出:[h,a,f,z]

问题是您没有阅读Javadoc;)PrirotiyQueue只保证第一个元素被排序。哦!非常感谢。这是一个简单而棘手的问题!:)@PeterSmithPriorityQueue假设您只关心AFAIK加速性能的next()元素。但是,这确实意味着当您迭代集合时,它不会被排序。