9

Java 6のaddFirstofferFirstメソッドの違いを理解するために、サンプル プログラムを試してみました。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

これはDequeArrayDeque実装する に記載されています。

ArrayDeque容量制限がないため、基本的に.addFirst()例外をスローすることはありません (.offerFirst()常に を返しtrueます)。これは、たとえば、LinkedBlockingQueue初期容量を持つビルドとは異なります。

于 2014-03-10T06:35:32.797 に答える
2

offerFirst のソースコード:

 public boolean offerFirst(E e) {
        addFirst(e);
        return true;
    }

そしてaddFirst

 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 に答える