web-dev-qa-db-ja.com

なぜJavaはキューから要素を削除する2つの方法を提供するのですか?

JavaのQueue実装には、要素を削除する2つのメソッドがあります。1つは例外をスローするremove()で、もう1つはpoll()です。空のキューに対してnullを返します。2つの疑問があります。

  1. なぜQueueは要素を削除するために異なる実装を持っているのですか?
  2. どの実装をいつ使用するか?
30
munish

場合によっては、キューが空になることが予想されます。そのような場合は、例外をスローしないメソッドを使用するのが適切です。他の状況では、キューが空であり、例外が適切であるというのは例外的な状況です。

例外をスローするとパフォーマンスが低下します。キューが空になることがあると予想される場合は、queue-empty-logicを例外のキャッチとして処理する必要はありません。コストと困難の両方があります。読む。

キューが空になるとは思わない逆の場合は、プログラミングエラーの兆候、またはその他の例外的な状況であり、醜いエラー状態チェックコードを記述したくない場合(チェックなど) nullの場合)、この場合、例外をキャッチするよりも読みにくくなるためです(別のスコープで実行できます)。

23
Theo

抽象クラス_AbstractQueue<E>_は_Queue<E>_を実装し、removeメソッドを定義します。

あなたはソースコードを見ることができます:

_public E remove() {
    E x = poll();
    if (x != null)
        return x;
    else
        throw new NoSuchElementException();
}
_

したがって、ご覧のとおり、remove()メソッドsepoll()メソッドです。

お好みのものをお使いいただけます。

14

答えを見ると、どちらが何をしたのかはっきりしませんでした。

APIから直接: remove()メソッドとpoll()メソッドは、キューが空の場合の動作のみが異なります。remove()メソッドは例外をスローしますが、poll()メソッドはnullを返します。

5
Achow

今すぐ反応する方法を知っている場合、および/または要素が存在しないことを期待している場合は、pollを使用してください。

それ以外の場合は、removeを使用します。

4
Mykola Golubyev

Remove()メソッドは、このキューが空の場合に例外をスローするという点でのみ、pollとは異なります。

enter image description here

2
David Wang

空のキューに対してnull値を返したい場合もあれば、空のキューを例外ケースとして扱いたい場合もあります。

1
Poindexter

2つの方法は、キュー構造に関する従来の議論では異なる方法で使用されます。私は主にpoll()を使用してアイテムを取得し、通常のループの外でキューを変更する必要がある場合は主にremove()を使用します。

0
Jon