尝试了一个示例程序,以了解Java 6 addFirst
中offerFirst
和ArrayDeque
方法之间的区别。但它们似乎相同,有什么建议吗?
public void interfaceDequetest()
{
try{
ArrayDeque<String> ad = new ArrayDeque<String>();
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);
}
}
答案 0 :(得分:9)
不同之处在于,由于队列容量限制,添加失败时会发生这种情况:
.addFirst()
抛出(未经检查的)异常,.offerFirst()
返回false
。 Deque
中记录了这一点,ArrayDeque
实现了这一点。
值得注意的是,ArrayDeque
没有容量限制,因此基本上.addFirst()
永远不会抛出异常(而.offerFirst()
将始终返回true
);例如,这不同于LinkedBlockingQueue
built with an initial capacity。
答案 1 :(得分:2)
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,这是唯一的区别......