Java Comparable在Java PriorityQueue中不起作用(PriorityQueue未根据特定字段排序)
我试图将某些对象推送到优先级队列中,我希望它们根据pathCost进行排序,以便最低的pathCost始终位于队列的顶部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
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()元素。但是,这确实意味着当您迭代集合时,它不会被排序。