我閱讀了文檔和我能找到的有關PriorityQueue的所有內容,但仍然不明白爲什麼輸出很奇怪我的意思是我無法獲得添加順序的一個要點,任何人都可以解釋嗎?
爲什麼在Java中的PriorityQueue中發生這種奇怪的順序?
PriorityQueue<String> pq = new PriorityQueue<String>();
pq.offer("2");
System.out.println("add 2 : " + pq);
pq.offer("4");
System.out.println("add 4 : " + pq);
System.out.println(pq.peek() + " ");
pq.offer("1");
System.out.println("offer 1 : " + pq);
pq.offer("3");
System.out.println("add 3 : " + pq);
pq.remove("1");
System.out.println("remove 1 : " + pq);
輸出:
add 2 : [2]
add 4 : [2, 4] <- why 4 goes there
offer 1 : [1, 4, 2] <- why 1 goes first
add 3 : [1, 3, 2, 4] <- why reorder
remove 1 : [2, 3, 4] <- again
元素使用[堆序](https://en.wikipedia.org/wiki/Heap_%28data_structure%29)。 –
需要考慮的是'PriorityQueue'實現'toString'的方式是這樣的,它命令String中的值。由於'toString'似乎是在'AbstractCollection'中實現的,所以我建議它可能不會。嘗試使用'poll'以正確的順序獲取元素。 –
@JohnB從AbstractCollection中獲得:「字符串表示形式由集合元素的列表組成,其順序由括號(」[]「)括起來。如果PriorityQueue不覆蓋該方法本身,那麼應該保證它是有序的(儘管不一定如你所期望的那樣)。 –