您好我使用添加和提供以最后的速度添加我的元素。 两者都返回布尔值,两者都不会抛出除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();
}
答案 0 :(得分:8)
这两种方法是等效的。
它们都存在的原因是the java.util.Queue
interface指定了两者。
java.util.Queue
指定两者的原因是允许java.util.Queue
的实现实现容量限制,并且指定这两种方法在添加元素会违反该限制的情况下表现不同;具体而言,add(...)
指定在这种情况下抛出IllegalStateException
,而offer(...)
只返回false
。
java.util.ArrayDequeue
没有实施任何容量限制,因此不会出现这种情况,因此区别不适用。
答案 1 :(得分:1)
Queue
documentation在解释差异方面做得相当不错。
add(E e)
具有抛出异常的能力。如果队列已满,则会发生这种情况。
offer(E e)
将返回一个特殊值(在本例中为布尔值)。如果您正在处理大小有限的队列但不想抛出异常,这将非常有用。
答案 2 :(得分:0)
offer(E e)
方法将不会抛出IllegalStateException
如果没有可用空间,它将返回false
但如果当前没有可用空间,add(E e)
方法将抛出IllegalStateException
。
和其他事情是一样的。
答案 3 :(得分:0)
boolean add(E e)
如果可以这样做,则将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部)立即不违反容量限制,成功时返回true,如果当前没有可用空间则抛出IllegalStateException。
当使用容量限制的双端队列时,通常最好使用报价(E e)。
在此双端队列的末尾插入指定的元素
此方法相当于addLast(E)。
布尔报价(E e)
如果可以在不违反容量限制的情况下立即执行此操作,则将指定的元素插入此双端队列表示的队列(换句话说,在此双端队列的尾部),成功时返回true,如果当前没有可用空间则返回false。 br />使用容量限制的双端队列时,此方法通常优于add(E)方法,只能通过抛出异常来插入元素。
在此双端队列的末尾插入指定的元素 此方法等同于offerLast(E)。