簡體   English   中英

ArrayDqueue Class的add(E e)和offer(E e)之間的差異

[英]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

和其他事情是一樣的。

在Java SE 8中

  • 布爾加法(E e)

    如果可以在不違反容量限制的情況下立即執行此操作,則將指定的元素插入此雙端隊列表示的隊列中(換句話說,在此雙端隊列的尾部),成功時返回true,如果當前沒有空間則拋出IllegalStateException 。
    當使用容量限制的雙端隊列時,通常優選使用要約(E e)。

    在此雙端隊列的末尾插入指定的元素。
    此方法等同於addLast(E)。

  • 布爾報價(E e)

    如果可以在不違反容量限制的情況下立即執行此操作,則將指定的元素插入此雙端隊列表示的隊列中(換句話說,在此雙端隊列的尾部),成功時返回true,如果當前沒有可用空間則返回false。
    使用容量限制的雙端隊列時,此方法通常優於add(E)方法,該方法無法僅通過拋出異常來插入元素。

    在此雙端隊列的末尾插入指定的元素。
    此方法相當於offerLast(E)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM