繁体   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