我想知道爲什麼下面的輸出是[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);
我想知道爲什麼下面的輸出是[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);
您應該養成爲JDK類諮詢Javadoc的習慣。
System.out.println(q)
,根據its documentation,來電String.valueOf(q)
,根據its documentation呼叫q.toString()
,根據its documentation其使用從q.iterator()
元件,根據its documentation這是不以任何特定次序的順序哪個。
如果考慮如何實現優先隊列(通常作爲某種堆結構),這是有道理的:堆不記錄元素的順序,除了確保每個節點都有一個小於其所有後代節點的值。要以有意義的順序返回元素將需要最差情況O(n 日誌 n)時間。
好吧好吧!謝謝! – derpmerp
隊列的'toString()'方法不按順序顯示元素。 – pvg
好的;有沒有toString()方法使用的特定順序?此外,在我的情況下,System.out.println計數爲toString()嗎?謝謝:) – derpmerp
println只需調用toString就可以得到任何參數。您可以查看文檔以查看什麼toString PriorityQueue使用,它是AbstractCollection中的一個,您可以查看該源代碼。但基本上這只是一個方便,以顯示收集內容。你不應該依賴任何東西的順序。 – pvg