9

addFirst已经尝试了一个示例程序来了解 Java 6和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);
        }
}
4

2 回答 2

13

不同之处在于,由于队列容量限制,添加失败时会发生什么:

  • .addFirst()抛出一个(未经检查的)异常,
  • .offerFirst()返回false

这记录在 中Deque,它ArrayDeque实现了。

需要注意的是ArrayDeque没有容量限制,所以基本上.addFirst()不会抛出异常(并且.offerFirst()会一直返回true);例如,这LinkedBlockingQueue与具有初始容量的构建不同。

于 2014-03-10T06:35:32.797 回答
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,这是唯一的区别......

于 2014-03-10T06:35:15.890 回答