簡體   English   中英

比較器對於Priorityqueue Java無法正常工作

[英]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的內部結構不是有序的,它是一個堆,您可以檢查問題。

使用方法peekpoll檢索數據時,將保證將其排序。

但是在迭代隊列時要小心:

不保證方法iterator()中提供的Iterator以任何特定順序遍歷優先級隊列的元素。 如果需要有序遍歷,請考慮使用Arrays.sort(pq.toArray())。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM