【问题标题】:Differnce between addfirst and offerFirst methods in ArrayDequeArrayDeque 中 addfirst 和 offerFirst 方法的区别
【发布时间】:2014-04-13 03:51:35
【问题描述】:

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

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

【问题讨论】:

    标签: java arraydeque


    【解决方案1】:

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

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

    这在Deque 中有记录,ArrayDeque 实现了这一点。

    值得注意的是ArrayDeque没有容量限制,所以基本上.addFirst()永远不会抛出异常(而.offerFirst()总是会返回true);例如,这与LinkedBlockingQueue built with an initial capacity 不同。

    【讨论】:

      【解决方案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,这是唯一的区别...

      【讨论】:

        猜你喜欢
        • 2015-04-03
        • 2021-08-06
        • 2019-03-21
        • 2020-10-27
        • 2013-09-19
        • 2016-06-10
        • 2018-11-01
        • 2012-09-20
        • 2020-12-10
        相关资源
        最近更新 更多