2011-10-28 257 views
7

我有一個Java程序,它是這樣的的Java:優先級隊列

公共類PriorityQueueExample {

public static void main(String[] args) { 
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 
    pq.add(10); 
    pq.add(1); 
    pq.add(9); 
    pq.add(2); 
    pq.add(8); 
    pq.add(3); 
    pq.add(7); 
    pq.add(4); 
    pq.add(6); 
    pq.add(5); 
System.out.println(pq); 

} 

}

我的問題是,爲什麼不優先級隊列排序。根據Java規範,它實現了可比較的並保持排序順序(自然排序)

我的程序輸出如下:[1,2,3,4,5,9,7,10,6,8 ]

回答

7

插入優先級隊列不足以對元素列表進行排序,因爲它不會按排序順序存儲它們;它將它們存儲在部分排序的堆訂單中。你必須刪除在一個循環中的元素對它們進行排序:

while (pq.size() > 0) 
    System.out.println(pq.remove()); 
7

將垃圾分類,但內部的元素存儲在一個。如果您撥打peek()poll()remove(),您將得到正確的順序(這就是您訪問隊列的方式)。