我写了一个自定义比较器来比较我的节点类,但是java优先级队列没有以正确的顺序返回我的项目。Java:PriorityQueue从自定义比较器返回不正确的排序?
这里是我的比较:
public int compare(Node n1, Node n2){
if (n1.getF() > n2.getF()){
return +1;
}
else if (n1.getF() < n2.getF()){
return -1;
}
else { // equal
return 0;
}
}
凡GETF返回一个double。将几个节点到优先级队列后,但是,我打印出来使用:
while(open.size() > 0) {
Node t = (Node)(open.remove());
System.out.println(t.getF());
}
导致:
6.830951894845301
6.830951894845301
6.0
6.0
5.242640687119285
7.4031242374328485
7.4031242374328485
8.071067811865476
任何想法,为什么会这样?我的比较器是否错误?谢谢。
Mike
实际的Java类是你的“java优先队列”(我认为是PriorityQueue),你是如何构造它的? – Gray 2010-06-15 19:59:14
java.util.PriorityQueue,我假设? – Ceilingfish 2010-06-15 20:00:10
不回答你的问题,但我注意到你可以简化你的比较器: 'return Double.compare(n1.getF(),n2.getF());' – 2010-06-15 20:00:37