2016-12-24 63 views
1

我想知道爲什麼下面的輸出是[12,15,12]?我知道Priority Queue通過堆分類它的元素,但是在15之前怎麼沒有放到12?非常感謝! :)爲優先級隊列提供更多元素?

Queue<Integer> q; 
q= new PriorityQueue<>(); 
q.offer(15); 
q.offer(12); 
q.offer(2); 
q.poll(); 
q.offer(q.peek()); 
q.peek(); 
System.out.println(q); 
+1

隊列的'toString()'方法不按順序顯示元素。 – pvg

+0

好的;有沒有toString()方法使用的特定順序?此外,在我的情況下,System.out.println計數爲toString()嗎?謝謝:) – derpmerp

+0

println只需調用toString就可以得到任何參數。您可以查看文檔以查看什麼toString PriorityQueue使用,它是AbstractCollection中的一個,您可以查看該源代碼。但基本上這只是一個方便,以顯示收集內容。你不應該依賴任何東西的順序。 – pvg

回答

2

您應該養成爲JDK類諮詢Javadoc的習慣。

System.out.println(q),根據its documentation,來電String.valueOf(q),根據its documentation呼叫q.toString(),根據its documentation其使用從q.iterator()元件,根據its documentation這是不以任何特定次序的順序哪個。

如果考慮如何實現優先隊列(通常作爲某種堆結構),這是有道理的:堆不記錄元素的順序,除了確保每個節點都有一個小於其所有後代節點的值。要以有意義的順序返回元素將需要最差情況O(n  日誌  n)時間。

+0

好吧好吧!謝謝! – derpmerp