ArrayDeque中addfirst和offerFirst方法之间的差异

尝试了一个示例程序,以了解Java 6的ArrayDequeaddFirstofferFirst方法之间的区别。但它们似乎相同,有什么建议吗?

 public void interfaceDequetest() { try{ ArrayDeque ad = new ArrayDeque(); ad.addFirst("a1"); ad.offerFirst("o1"); ad.addFirst("a2"); ad.offerFirst("02"); ad.addFirst("a3"); System.out.println("in finally block"); for (String number : ad){ System.out.println("Number = " + number); } } 

不同之处在于,由于队列容量限制,添加失败时会发生以下情况:

  • .addFirst()抛出(未经检查的)exception,
  • .offerFirst()返回false

这在Deque有记载, ArrayDeque实现了它。

值得注意的是, ArrayDeque没有容量限制,所以基本上.addFirst()永远不会抛出exception(并且.offerFirst()将始终返回true ); 例如,这与使用初始容量构建的LinkedBlockingQueue不同。

offerFirst的源代码:

  public boolean offerFirst(E e) { addFirst(e); return true; } 

并添加第一个

  public void addFirst(E e) { if (e == null) throw new NullPointerException(); elements[head = (head - 1) & (elements.length - 1)] = e; if (head == tail) doubleCapacity(); } 

offerFirst返回true,这是唯一的区别……