Java.util.PriorityQueue には、メソッドadd(E e)
およびoffer(E e)
があります。どちらの方法も次のように文書化されています。
指定された要素をこの優先度キューに挿入します。
これら2つの方法の違いは何ですか?
違いは、offer()
は、サイズ制限のある要素の挿入に失敗した場合にfalse
を返す Queue であるのに対し、add()
はIllegalStateException
。
要素の挿入の失敗が正常な場合はoffer()
を使用し、例外が例外的な場合(処理する必要がある)はadd()
を使用する必要があります。
違いを見つけるには、 PriorityQueue API javadocs に従う必要があります。これには、Queue
インターフェースのそれぞれのメソッドを参照する「Specified By」セクションがあります。
容量制限に違反せずにすぐに指定可能な要素をこのキューに挿入し、成功するとtrueを返し、現在使用可能なスペースがない場合はIllegalStateExceptionをスローします...
戻り値:true
( Collection.add(E) で指定)
スロー:IllegalStateException
-容量制限のために、この時点で要素を追加できない場合...
容量制限に違反せずにすぐに指定できる場合は、指定された要素をこのキューに挿入します。 容量が制限されたキューを使用する場合、例外をスローするだけで要素の挿入に失敗する可能性があるadd(E)よりも、このメソッドが一般的に推奨されます。 ..
戻り値:true
要素がこのキューに追加された場合はfalse
...
宣言されたインターフェースで実装する必要があるため、両方のメソッドが存在します。
PriorityQueueは無制限であるため(javadocs:「unbounded優先キューに基づく優先キュー...」)、上記のAPIデザイナーの設定は適用されません。つまり、特定の使用状況でのニーズにより適した方法を選択することは、プログラマの裁量に任されています。