[英]Comparator not working correctly for Priorityqueue Java
我將邊緣添加到PriorityQueue中,但是由於某些原因,它們沒有按其值排序,從而導致稍后出現錯誤結果。
我的邊緣班看起來像這樣
class Edge implements Comparable<Edge>{
int value;
String dest;
String start;
public Edge(String start, String dest, int g) {
this.dest = dest;
value = g;
this.start = start;
}
@Override
public int compareTo(Edge o) {
int temp = value - o.value;
if (temp > 0) {
return 1;
}
if (temp < 0) {
return -1;
}
return 0;
}
但是,當我在屬於“ Springfield,MO”節點的LinkedList上的addAll上運行代碼,並將其添加到PriorityQueue時,Edges的排序順序錯誤,如下所示,這是什么問題?
queue.addAll(list.get(node));
我嘗試為Edge創建一個特定的比較器類,並將其用作PriorityQueue中的參數,但仍然得到相同的結果。
PriorityQueue
的內部結構不是有序的,它是一個堆,您可以檢查此問題。
使用方法peek
或poll
檢索數據時,將保證將其排序。
但是在迭代隊列時要小心:
不保證方法iterator()中提供的Iterator以任何特定順序遍歷優先級隊列的元素。 如果需要有序遍歷,請考慮使用Arrays.sort(pq.toArray())。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.