2
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(4);
queue.add(8);
queue.add(5);
queue.add(23);
queue.add(6);
System.out.println(queue);

友達、Ubuntu12.10とOracleJava1.6とJava1.7の前のコードは、次のように出力を出力しています。

[5, 6, 23, 8]

これは間違っていると思います。これは代わりに[5, 6, 8, 23] 「これは欠陥ですか?」と印刷されているはずです。または優先キューの私の理解が間違っていますか?

それに加えて、23をPriorityQueueに追加する前または後に位置を変更すると、これは期待どおりに機能します。

4

2 に答える 2

7

クラスtoString()メソッドAbstractCollectionPriorityQueue使用するもの)は、次のように述べています。

このコレクションの文字列表現を返します。文字列表現は、コレクションの要素のリストで構成され、イテレータによって返される順序で、角かっこ( "[]")で囲まれています。

PriorityQueueイテレータのドキュメントを見ると、次のように記載されています。

このキューの要素に対するイテレータを返します。イテレータは、特定の順序で要素を返しません。

優先順位は、キューからアイテムを抽出するときにのみ機能し、アイテムの文字列表現を取得するときには機能しません。

于 2012-11-27T12:25:27.480 に答える
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
于 2012-11-27T12:24:26.403 に答える