首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Deque的ArrayDeque类

Deque的ArrayDeque类
EN

Stack Overflow用户
提问于 2011-04-11 20:06:34
回答 4查看 1.3K关注 0票数 0

因为ArrayDeque类实现了Deque,而且它没有任何容量限制。像addFirst()addLast()等异常抛出方法的目的是什么?它将在任何情况下添加元素,因为数组没有边界。有人能解释一下我们可以在try{}catch{}块中使用的实现和addFirst可能抛出异常的场景吗?

代码语言:javascript
复制
try{ArrayDeque adObj = new ArrayDeque();
adObj.addFirst("Oracle");//we can keep on adding first. Use to exception handling?
}catch(Exception e){
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-11 20:12:52

ArrayDeque确实存在潜在的容量问题,这意味着它可能会抛出。它每次扩展都会使容量加倍,所以最终它不能再加倍了。代码的一个实现执行以下操作:

代码语言:javascript
复制
private void doubleCapacity() {
    int n = elements.length;
    int newCapacity = n << 1;
    if (newCapacity < 0)
        throw new IllegalStateException("Sorry, deque too big");
}

由于addFirst的定义如下所示,此方法至少可以抛出接口文档中描述的两个异常。

代码语言:javascript
复制
public void addFirst(E e) {
    if (e == null)
        throw new NullPointerException();
    elements[head = (head - 1) & (elements.length - 1)] = e;
    if (head == tail)
        doubleCapacity();
}

正如其他人所提到的,接口上的JavaDoc只是给出了可能的异常。它抛出的类型都不是检查过的异常,所以你不会被强制去捕捉它们。

票数 1
EN

Stack Overflow用户

发布于 2011-04-11 20:11:30

ArrayDequeue.addFirst() is documented to throw的唯一例外是NullPointerException。因为这是一个未检查的异常,所以您不需要catch-block。

票数 1
EN

Stack Overflow用户

发布于 2011-04-11 20:13:32

Deque的一些实现是绑定的(即容量有限),有些则不是。如果已达到限制,则addFirst等方法将抛出IllegalStateException。其他方法,如offerFirst,返回一个布尔值来表示完全相同的结果。

如果您不想处理潜在的异常,或者知道不会有任何异常,只需使用offerFirst并忽略结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5621004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档