0

java.util.Queueのように動作し、さらに「最終項目が削除されました」という概念を持つJava 7 データ構造を探しています。

たとえば、次のような概念は表現可能でなければなりません。

while(!endingQueue.isFinished()) {
    Element e = endingQueue.remove()
    doSomethingWith(e);
}
4

1 に答える 1

2

インターフェイス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があるかどうかを確認するための追加のメソッドを提供します。

発生する可能性のある、または発生しない可能性のあるパフォーマンスの問題を心配するのではなく、実際のパフォーマンスの問題が発生するかどうかをテストして確認します。

于 2013-02-20T15:02:34.640 に答える