由于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){
}

最佳答案

ArrayDeque确实存在潜在的容量问题,这意味着它可能会抛出。每次扩展时,容量都会加倍,因此最终再也不能再加倍了。该代码的一种实现方式如下:

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


使用addFirst的定义如下所示,此方法可以引发接口文档中描述的至少两个异常。

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


正如其他人提到的那样,接口上的JavaDoc仅给出了可能的异常。它引发的所有类型都不是检查异常,因此您不必强制捕获它们。

10-08 20:23