我寫了一個自定義比較器來比較我的節點類,但是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