HOWTO · Java

Java 中的佇列 offer 與 add

本文介紹了 Java 中 queue 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)