java.util.Queue
のように動作し、さらに「最終項目が削除されました」という概念を持つJava 7 データ構造を探しています。
たとえば、次のような概念は表現可能でなければなりません。
while(!endingQueue.isFinished()) {
Element e = endingQueue.remove()
doSomethingWith(e);
}
java.util.Queue
のように動作し、さらに「最終項目が削除されました」という概念を持つJava 7 データ構造を探しています。
たとえば、次のような概念は表現可能でなければなりません。
while(!endingQueue.isFinished()) {
Element e = endingQueue.remove()
doSomethingWith(e);
}
インターフェイスjava.util.Queueを使用して、どうですか
while(queue.peek() != null) {
Element e = queue.remove();
doSomethingWith(e);
}
アブダルのコメントに答えるために編集:
契約により、nullアイテムはjava.util.Queueの有効なエントリである可能性があります
私には見えないので、これを言うjavadocの特定の文を指摘する必要があります。
私が見ているのは、ピークメソッドの説明です。
このキューの先頭を取得しますが、削除しません。このキューが空の場合はnullを返します。
これで、キュー内の要素をnullにすることができます。しかし、それはまだ要素であり、peekメソッドとremoveメソッドによって返されます。
また、同時にアクセスされるキューについても考えてみてください。nullをチェックするだけでは、プロデューサーが要素をキューに入れたかどうかを判断するのに十分でない場合があります。
キューはインターフェースです。これは、 ConcurrentLinkedQueueなどの具体的な実装でテストする必要があります。具体的な実装のどれもあなたが望むことをしない場合、あなたは自分でキューを自由に実装することができます。
キューインターフェイスは、キューに要素があるかどうかを確認するためのメソッドを提供します。
ConcurentLinkedQueueクラスは、キューに要素isEmptyがあるかどうかを確認するための追加のメソッドを提供します。
発生する可能性のある、または発生しない可能性のあるパフォーマンスの問題を心配するのではなく、実際のパフォーマンスの問題が発生するかどうかをテストして確認します。