2011-04-17 66 views
16

我有一個優先級隊列中,我節點對象添加到,其中節點應該由一個值,它們包含進行排序。出於某種原因,優先級隊列不會對添加的節點進行排序。如果任何人都可以看到有問題或有任何指導,我很感激。下面是一個簡單的例子:PriorityQueue中未排序上添加

PriorityQueue<Node> PQ = new PriorityQueue<Node>(); 
     //for each entry create a node and add it to the PriorityQueue 
     for(Entry<Character,Integer> entry : entries){ 
      PQ.add(new Node(entry.getKey(),entry.getValue(), true)); 
     } 

這裏是節點的compareTo方法:

@Override 
public int compareTo(Node n) { 
    if(n.frequency.intValue() > this.frequency.intValue()) return -1; 
    else if(n.frequency.intValue() == this.frequency.intValue()) return 0; 
    else return 1; 
} 

回答

34

我想你想到PriorityQueue當你迭代它返回的特定順序的元素。但是,PriorityQueue不提供這樣的行爲,因爲它是作爲優先堆而不是排序列表實現的。從javadoc

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

PriorityQueue提供的唯一保證就是poll()peek()等返回的最小元素。如果您需要對元素進行有序迭代,請使用其他一些集合,例如TreeSet

+0

權,但我希望它是在去除使用remove()方法 – 2011-04-17 17:30:38

+0

@Trevor每個對象的分類:您還沒有表現出迭代碼。請更新您的問題以顯示一個節目,但*完整的例子,我們可以編譯並運行。 – 2011-04-17 17:31:49

+0

沒關係,我現在意識到在remove()上對象被排序。感謝所有 – 2011-04-17 17:35:17

相關問題