HOWTO · Java
Java 中的佇列 offer 與 add
本文介紹了 Java 中 queue offer 和 add 方法的區別。
本頁內容
佇列是一種資料結構,允許使用者以先進先出的方式新增元素。在 Java 中,queue 是 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 例項。
第一條語句建立一個 ArrayBlockingQueue 的物件,其大小為二的固定容量和預設訪問策略。它需要一個大小值作為引數。如果容量小於 1,它會丟擲 IllegalArgumentException。
offer 方法在檢查容量限制後將指定的元素插入到這個佇列中。該函式將引數作為要新增的元素。如果將值新增到佇列的末尾,則此函式返回 true;否則,false。
如果指定元素的類阻止它被新增到它,它會丟擲一個 ClassCastException。如果指定的值為 null,則呼叫 NullPointerException。如果某些元素屬性阻止將其新增到佇列中,則會丟擲 IllegalArgumentException。
offer 函式旁邊的 print 語句列印布林值 true 或 false。同樣,一個新的 ArrayBlockingQueue 被例項化,容量為 two。它會追加直到兩次成功插入,然後丟擲異常跟蹤。
此方法將引數作為要新增到佇列的元素。每次新增成功後,它都會返回 true;否則,如果無法新增值,它會丟擲 IllegalStateException。
如果指定元素的類阻止它新增,則丟擲 ClassCastException。NullPointerException(如果指定值為 null),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)