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

2022-09-01 05:09:03

Java中的实现有两个方法来删除元素,一个是抛出异常,另一个是返回空队列。我有两个疑问:Queueremove()poll()null

  1. 为什么有不同的实现来删除元素?Queue
  2. 何时使用哪种实现?

答案 1

在某些情况下,预计队列将为空,在这些情况下,使用不引发异常的方法是合适的。在其他情况下,队列为空是异常情况,并且异常是合适的。

引发异常会导致性能下降,如果您期望队列不时为空,则不希望必须将队列空逻辑处理为捕获异常 - 这既昂贵又难以阅读。

在相反的情况下,您不希望队列为空,这是编程错误或其他一些特殊情况的迹象,并且您不想编写丑陋的错误条件检查代码(例如检查null),因为在这种情况下,这将比捕获异常(您可以在另一个范围内执行此操作)的可读性更差。


答案 2

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

你可以看看源代码:

public E remove() {
    E x = poll();
    if (x != null)
        return x;
    else
        throw new NoSuchElementException();
}

因此,如您所见,方法使用方法。remove()poll()

您可以使用自己喜欢的那个。


推荐