[英]Difference between add(E e) and offer(E e) of ArrayDqueue Class
嗨,我使用添加和提供添加我的元素在最后的步伐。 兩者都返回布爾值,兩者都不會拋出除NPE之外的任何異常。
public class ArrayDequeDemo {
public static void main(String[] args) {
// Create ArrayDeque elements.
ArrayDeque<Integer> deque = new ArrayDeque<>();
deque.add(10);
deque.offer(30);
}
}
兩者都會通過返回布爾值在最后的位置添加元素。
JAVA實施
//For Add and Offer Both
public void addLast(E e) {
if (e == null)
throw new NullPointerException();
elements[tail] = e;
if ( (tail = (tail + 1) & (elements.length - 1)) == head)
doubleCapacity();
}
這兩種方法是等價的。
它們都存在的原因是java.util.Queue
接口指定了兩者。
java.util.Queue
指定兩者的原因是允許java.util.Queue
實現實現容量限制,並且指定兩個方法在添加元素違反該限制的情況下表現不同; 具體來說, add(...)
被指定在這種情況下拋出IllegalStateException
,而offer(...)
只返回false
。
但是, java.util.ArrayDequeue
沒有實現任何容量限制,因此不會出現這種情況,因此區別不適用。
Queue
文檔在解釋差異方面做得相當不錯。
如果無法將元素添加到隊列中,則add(E e)
具有拋出異常的能力。 如果隊列已滿,則會發生這種情況。
如果無法將值添加到隊列中, offer(E e)
將返回一個特殊值(在本例中為布爾值)。 如果您正在處理大小有限的隊列但不想拋出異常,這將非常有用。
offer(E e)
方法不會拋出IllegalStateException
如果當前沒有可用空間,如果沒有可用空間,它將返回false
但如果當前沒有可用空間,則add(E e)
方法將拋出IllegalStateException
。
和其他事情是一樣的。
布爾加法(E e)
如果可以在不違反容量限制的情況下立即執行此操作,則將指定的元素插入此雙端隊列表示的隊列中(換句話說,在此雙端隊列的尾部),成功時返回true,如果當前沒有空間則拋出IllegalStateException 。
當使用容量限制的雙端隊列時,通常優選使用要約(E e)。
在此雙端隊列的末尾插入指定的元素。
此方法等同於addLast(E)。
布爾報價(E e)
如果可以在不違反容量限制的情況下立即執行此操作,則將指定的元素插入此雙端隊列表示的隊列中(換句話說,在此雙端隊列的尾部),成功時返回true,如果當前沒有可用空間則返回false。
使用容量限制的雙端隊列時,此方法通常優於add(E)方法,該方法無法僅通過拋出異常來插入元素。
在此雙端隊列的末尾插入指定的元素。
此方法相當於offerLast(E)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.