web-dev-qa-db-ja.com

JavaのPriorityQueueのaddメソッドとofferメソッドの違いは何ですか?

Java.util.PriorityQueue には、メソッドadd(E e)およびoffer(E e)があります。どちらの方法も次のように文書化されています。

指定された要素をこの優先度キューに挿入します。

これら2つの方法の違いは何ですか?

12
agent13

違いは、offer()は、サイズ制限のある要素の挿入に失敗した場合にfalseを返す Queue であるのに対し、add()IllegalStateException

要素の挿入の失敗が正常な場合はoffer()を使用し、例外が例外的な場合(処理する必要がある)はadd()を使用する必要があります。

16
yannis

違いを見つけるには、 PriorityQueue API javadocs に従う必要があります。これには、Queueインターフェースのそれぞれのメソッドを参照する「Specified By」セクションがあります。

  • Queue.add

    容量制限に違反せずにすぐに指定可能な要素をこのキューに挿入し、成功するとtrueを返し、現在使用可能なスペースがない場合はIllegalStateExceptionをスローします...
    戻り値:trueCollection.add(E) で指定)
    スロー:IllegalStateException-容量制限のために、この時点で要素を追加できない場合...

  • Queue.offer

    容量制限に違反せずにすぐに指定できる場合は、指定された要素をこのキューに挿入します。 容量が制限されたキューを使用する場合、例外をスローするだけで要素の挿入に失敗する可能性があるadd(E)よりも、このメソッドが一般的に推奨されます。 ..
    戻り値:true要素がこのキューに追加された場合はfalse...

宣言されたインターフェースで実装する必要があるため、両方のメソッドが存在します。

PriorityQueueは無制限であるため(javadocs:「unbounded優先キューに基づく優先キュー...」)、上記のAPIデザイナーの設定は適用されません。つまり、特定の使用状況でのニーズにより適した方法を選択することは、プログラマの裁量に任されています。

4
gnat