Java におけるキューの offer と add

Rashmi Patidar 2023年10月12日
Java におけるキューの offer と add

キューは、ユーザーが先入れ先出しの方法で要素を追加できるようにするデータ構造です。Java では、キューjava.util パッケージに存在するインターフェースです。これは、データ構造内の順序付けられた要素を許可する線形構造です。

コレクションは、両端、つまり後部と前端から開いています。このプロパティを使用すると、オブジェクトをフロントエンドで追加したり、リアエンドから削除したりできます。

構造にはさまざまなメソッドがあり、その説明は以下のコードにあります。

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

public class Main {
  public static void main(String[] args) {
    Queue queue = new ArrayBlockingQueue(2);
    boolean value = false;
    value = queue.offer(1);
    System.out.println("Offer Returned Value: " + value);
    value = queue.offer(2);
    System.out.println("Offer Returned Value: " + value);
    value = queue.offer(3);
    System.out.println("Offer Returned Value: " + value);

    Queue blockingQueue = new ArrayBlockingQueue(2);
    blockingQueue.add(5);
    blockingQueue.add(10);
    blockingQueue.add(15);
  }
}

上記のコードブロックには、add メソッドと offer メソッドの両方の実装が含まれており、両方の違いを提供します。上記のコードブロックは、new キーワードを使用して queue インスタンスをインスタンス化します。

最初のステートメントは、サイズ 2 の固定容量とデフォルトのアクセスポリシーを使用して、ArrayBlockingQueue のオブジェクトを作成します。サイズ値をパラメータとして取ります。容量が 1 より小さい場合、IllegalArgumentException をスローします。

offer メソッドは、容量制限を確認した後、指定された要素をこのキューに挿入します。この関数は、追加する要素としてパラメーターを取ります。値がキューの最後に追加された場合、この関数は true を返します。それ以外の場合、false

指定された要素のクラスが要素の追加を妨げている場合、ClassCastException をスローします。指定された値が null の場合、NullPointerException が呼び出されます。IllegalArgumentException は、一部の要素プロパティによってキューへの追加が妨げられた場合にスローされます。

offer 関数の横にある print ステートメントは、ブール値 true または false を出力します。この場合も、新しい ArrayBlockingQueue がサイズ 2 の容量でインスタンス化されます。挿入が 2 回成功するまで追加してから、Exception トレースをスローします。

このメソッドは、キューに追加する要素としてパラメーターを取ります。追加が成功すると、毎回 true が返されます。それ以外の場合、値を追加できない場合は IllegalStateException がスローされます。

指定された要素のクラスがそれを追加できない場合、ClassCastException がスローされます。指定された値が null の場合は NullPointerException、この要素のプロパティがキューに追加されない場合は IllegalArgumentException

メソッド間の唯一の違いは、追加が行われた場合、offer メソッドが true または false をスローすることです。これとは対照的に、add メソッドは、キューでこれ以上追加できない場合に例外をスローします。

以下は、上記のコードブロックからの結果の出力です。

Offer Returned Value: true
Offer Returned Value: true
Offer Returned Value: false
Exception in thread "main" java.lang.IllegalStateException: Queue full
    at java.util.AbstractQueue.add(AbstractQueue.java:98)
    at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312)
    at F11.QueueAddVsOffer.main(QueueAddVsOffer.java:25)
著者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

関連記事 - Java Queue