Java 中的佇列 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)
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