2012-11-27 49 views
2
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(4); 
queue.add(8); 
queue.add(5); 
queue.add(23); 
queue.add(6); 
System.out.println(queue); 

朋友, 在Ubuntu 12.10和Oracle的Java 1.6和Java 1.7前面的代碼,它在打印輸出優先級隊列行爲不端

[5, 6, 23, 8] 

我認爲這是錯誤的。這應該有打印爲[5, 6, 8, 23] 這是一個缺陷?或者我對優先隊列的理解是錯誤的?

除此之外,如果我更改在PriorityQueue之前或之後添加23的位置,則按預期工作。

回答

7

toString() method for the AbstractCollection class(這是什麼PriorityQueue用途)指出,:

返回此collection的字符串表示。字符串表示由集合元素的列表組成,它們按其迭代器返回的順序包含在方括號中(「[]」)。

如果你看看docs for the PriorityQueue iterator,它指出:

返回在此隊列中的元素的迭代器。迭代器不會以任何特定順序返回元素。

優先級只配備在當您從隊列中取出的物品,而不是當你讓他們的字符串表示的發揮。

4

這只是字符串表示形式。嘗試多次撥打remove()

System.out.println(queue.remove()); 
System.out.println(queue.remove()); 
System.out.println(queue.remove()); 
System.out.println(queue.remove()); 

這將導致

5 
6 
8 
23