0

ArrayDequeクラスはDequeを実装し、容量制限がないため。addFirst()、などの例外スローメソッドの目的は何addLast()ですか?配列には境界がないため、どのような場合でも要素が追加されます。ブロック内で使用できる実装try{}catch{}と、addFirstが例外をスローする可能性があるシナリオについて誰かが説明できますか?

try{ArrayDeque adObj = new ArrayDeque();
adObj.addFirst("Oracle");//we can keep on adding first. Use to exception handling?
}catch(Exception e){
}
4

4 に答える 4

1

ArrayDequeue.addFirst()スローすることが文書化されている唯一の例外はNullPointerException. これは未チェックの例外であるため、そのキャッチブロックは必要ありません。

于 2011-04-11T12:11:30.070 に答える
1

ArrayDequeスローされる可能性があることを意味する潜在的な容量の問題があります。拡張するたびに容量が 2 倍になるため、最終的にはそれ以上 2 倍にできなくなります。コードの 1 つの実装は、次のことを行います。

private void doubleCapacity() {
    int n = elements.length;
    int newCapacity = n << 1;
    if (newCapacity < 0)
        throw new IllegalStateException("Sorry, deque too big");
}

以下のように定義addFirstされている場合、このメソッドは、インターフェースのドキュメントに記載されている例外のうち少なくとも 2 つをスローできます。

public void addFirst(E e) {
    if (e == null)
        throw new NullPointerException();
    elements[head = (head - 1) & (elements.length - 1)] = e;
    if (head == tail)
        doubleCapacity();
}

他の人が言及したように、インターフェースの JavaDoc は可能な例外を与えるだけです。スローされるタイプはいずれもチェック例外ではないため、それらを強制的にキャッチする必要はありません。

于 2011-04-11T12:12:52.043 に答える
0

の実装にDequeは、バインドされている (つまり、容量が制限されている) ものと、そうでないものがあります。制限に達した場合にaddFirstスローするなどのメソッド。IllegalStateExceptionなどの他のメソッドofferFirstは、まったく同じ結果を示すブール値を返します。

潜在的な例外を処理したくない場合、または発生しないことがわかっている場合はofferFirst、結果を使用して無視してください。

于 2011-04-11T12:13:31.937 に答える
0

DequeがスローされるのはIllegalStateException、Java を使用すると、別の を使用したり、独自の実装を作成したりできるためですDeque。これにはサイズ制限がある場合があります。 ArrayDequeはこれらの例外をスローしないため、コードが使用することが絶対に確実である場合は、ArrayDequeそれらをそのように宣言するとスローされませんIllegalStateException

于 2011-04-11T12:16:35.533 に答える