Java 中的佇列 offer 與 add

Rashmi Patidar 2023年10月12日
Java 中的佇列 offer 與 add

佇列是一種資料結構,允許使用者以先進先出的方式新增元素。在 Java 中,queuejava.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);
  }
}

上面的程式碼塊包含 addoffer 方法的兩種實現,並提供了兩者之間的區別。上面的程式碼塊使用 new 關鍵字例項化了一個 queue 例項。

第一條語句建立一個 ArrayBlockingQueue 的物件,其大小為二的固定容量和預設訪問策略。它需要一個大小值作為引數。如果容量小於 1,它會丟擲 IllegalArgumentException

offer 方法在檢查容量限制後將指定的元素插入到這個佇列中。該函式將引數作為要新增的元素。如果將值新增到佇列的末尾,則此函式返回 true;否則,false

如果指定元素的類阻止它被新增到它,它會丟擲一個 ClassCastException。如果指定的值為 null,則呼叫 NullPointerException。如果某些元素屬性阻止將其新增到佇列中,則會丟擲 IllegalArgumentException

offer 函式旁邊的 print 語句列印布林值 truefalse。同樣,一個新的 ArrayBlockingQueue 被例項化,容量為 two。它會追加直到兩次成功插入,然後丟擲異常跟蹤。

此方法將引數作為要新增到佇列的元素。每次新增成功後,它都會返回 true;否則,如果無法新增值,它會丟擲 IllegalStateException

如果指定元素的類阻止它新增,則丟擲 ClassCastExceptionNullPointerException(如果指定值為 null),IllegalArgumentException(如果此元素的屬性阻止將其新增到佇列中)。

兩種方法之間的唯一區別是,如果進行新增,offer 方法會丟擲 truefalse。與此相反,當佇列中不可能有更多新增時,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