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 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