ArrayDeque中添加first和offerFirst方法之间的区别

时间:2014-03-10 06:32:00

标签: java arraydeque

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

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);
        }
}

2 个答案:

答案 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,这是唯一的区别......