ArrayDeque中addfirst和offerFirst方法之间的差异
尝试了一个示例程序,以了解Java 6的ArrayDeque
中addFirst
和offerFirst
方法之间的区别。但它们似乎相同,有什么建议吗?
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,这是唯一的区别……