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