java – ArrayDqueue类的add(E e)和offer(E e)之间的区别

嗨,我使用添加和提供添加我的元素在最后的步伐.
两者都返回布尔值,两者都不会抛出除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();
}

解决方法:

这两种方法是等价的.

它们都存在的原因是the java.util.Queue interface指定了两者.

java.util.Queue指定两者的原因是允许java.util.Queue的实现实现容量限制,并且指定两个方法在添加元素违反该限制的情况下表现不同;具体来说,add(…)被指定在这种情况下抛出IllegalStateException,而offer(…)只返回false.

但是,java.util.ArrayDequeue没有实现任何容量限制,因此不会出现这种情况,因此区别不适用.

上一篇:ArrayDeque的使用与底层原理


下一篇:Java集合框架——Stack