JavaのQueue
実装には、要素を削除する2つのメソッドがあります。1つは例外をスローするremove()
で、もう1つはpoll()
です。空のキューに対してnull
を返します。2つの疑問があります。
Queue
は要素を削除するために異なる実装を持っているのですか?場合によっては、キューが空になることが予想されます。そのような場合は、例外をスローしないメソッドを使用するのが適切です。他の状況では、キューが空であり、例外が適切であるというのは例外的な状況です。
例外をスローするとパフォーマンスが低下します。キューが空になることがあると予想される場合は、queue-empty-logicを例外のキャッチとして処理する必要はありません。コストと困難の両方があります。読む。
キューが空になるとは思わない逆の場合は、プログラミングエラーの兆候、またはその他の例外的な状況であり、醜いエラー状態チェックコードを記述したくない場合(チェックなど) nullの場合)、この場合、例外をキャッチするよりも読みにくくなるためです(別のスコープで実行できます)。
抽象クラス_AbstractQueue<E>
_は_Queue<E>
_を実装し、removeメソッドを定義します。
あなたはソースコードを見ることができます:
_public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
_
したがって、ご覧のとおり、remove()
メソッドsepoll()
メソッドです。
お好みのものをお使いいただけます。
答えを見ると、どちらが何をしたのかはっきりしませんでした。
APIから直接: remove()メソッドとpoll()メソッドは、キューが空の場合の動作のみが異なります。remove()メソッドは例外をスローしますが、poll()メソッドはnullを返します。
今すぐ反応する方法を知っている場合、および/または要素が存在しないことを期待している場合は、pollを使用してください。
それ以外の場合は、removeを使用します。
Remove()
メソッドは、このキューが空の場合に例外をスローするという点でのみ、pollとは異なります。
空のキューに対してnull値を返したい場合もあれば、空のキューを例外ケースとして扱いたい場合もあります。
2つの方法は、キュー構造に関する従来の議論では異なる方法で使用されます。私は主にpoll()を使用してアイテムを取得し、通常のループの外でキューを変更する必要がある場合は主にremove()を使用します。