首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Java提供了两种从队列中删除元素的方法?

为什么Java提供了两种从队列中删除元素的方法?
EN

Stack Overflow用户
提问于 2010-02-04 00:21:10
回答 7查看 28K关注 0票数 37

Java中的Queue实现有两种方法来移除元素,一种是抛出异常的remove()方法,另一种是为空队列返回nullpoll()方法。我有两个疑问:

  1. 为什么Queue有不同的实现来删除元素?
  2. 在什么情况下使用哪个实现?
EN

回答 7

Stack Overflow用户

发布于 2010-02-04 00:26:26

在某些情况下,预计队列将是空的,在这些情况下,使用不抛出异常的方法是合适的。在其他情况下,队列是空的是一种异常情况,异常是合适的。

抛出异常会导致性能损失,如果您希望队列不时为空,那么您不希望必须将队列-空-逻辑作为捕获异常来处理-它既昂贵又难以读取。

在相反的情况下,你不希望队列为空,这是编程错误的标志,或者是其他一些异常情况,你不想编写丑陋的错误条件检查代码(例如,检查null),因为在这种情况下,这将比捕获异常(这可以在另一个作用域中完成)的可读性更差。

票数 32
EN

Stack Overflow用户

发布于 2010-02-04 01:02:53

抽象类AbstractQueue<E>实现了Queue<E>并定义了remove方法。

你可以看一下源代码:

代码语言:javascript
复制
public E remove() {
    E x = poll();
    if (x != null)
        return x;
    else
        throw new NoSuchElementException();
}

因此,正如您所看到的,remove()方法使用 poll()方法。

你可以使用你喜欢的那一个。

票数 18
EN

Stack Overflow用户

发布于 2012-12-21 15:57:59

看着答案,我不清楚是谁做的,因此:

remove()和()方法只在队列为空时的行为不同: remove()方法抛出异常,而()方法返回null

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

https://stackoverflow.com/questions/2193450

复制
相关文章

相似问题

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