web-dev-qa-db-ja.com

オブジェクトのキューを順番に反復する

キュー内に配置された順序で繰り返し処理したいオブジェクトを含むキューを作成しました(最初のオブジェクトはキューに配置され、2番目のオブジェクトはキューに配置され、3番目のオブジェクト...)

これをオンラインで行う方法を見ましたが、キュー内のオブジェクトが正しい順序でアクセスされることが保証されるかどうかはわかりません。

for(MyObject anObject : queue){
    //do someting to anObject...

ご協力ありがとうございました。

13
user2268507

使用するQueue実装によって異なります。

たとえば、LinkedListは、反復がFIFO(挿入)の順序で要素を返すことを保証します。これは Dequeインターフェース を実装しているためです。

しかし、一般的に言えば、他のタイプのキューの場合は必ずしもそうではありません。

javadoc for Queue は次のように述べています。

キューは通常、必須ではありませんが、FIFO(先入れ先出し))で要素を並べ替えます。例外の中には、指定されたコンパレータに従って要素を並べ替える優先キューがあります。要素の自然順序付け、およびLIFOキュー(またはスタック))要素を順序付けしますLIFO(後入れ先出し)。

それはまた追加します:

すべてのキュー実装は、その順序付けプロパティを指定する必要があります。

したがって、使用している特定のキューのjavadocを確認するだけで、答えを見つけることができます。

4
assylias

キューをLinkedListとして実装します。その後、挿入された順序でオブジェクトを反復処理できます。エラーが発生しないように、キューに挿入するオブジェクトのタイプを宣言する必要があります。これをオブジェクトとして保持し、オブジェクトのキューとして指定すると、上記のコードが機能します。下記参照。

Queue<Object> queue = new LinkedList<Object>();
// add your objects here
// EX: queue.add(new MyObject)

for(Object item : queue){
    System.out.println(item.toString());
}

この場合はArrayListを使用する方が良いと思います。やってみてください。なぜキューだけを使いたいのですか?

0
Harish Kumar