Java中的Queue
实现有两个删除元素的方法,一个是remove()
,它抛出异常,另一个是poll()
,它为空队列返回null
。我有两个疑问:
Queue
有不同的实现来删除元素?答案 0 :(得分:23)
在某些情况下,预计队列将为空,并且在那些情况下具有不抛出异常的方法是合适的。在其他情况下,特殊情况是队列为空,并且例外是合适的。
抛出异常会导致性能下降,如果您希望队列有时是空的,您不希望必须将队列空逻辑处理为捕获异常 - 它们都是昂贵且难以阅读。
在相反的情况下,你不希望队列永远是空的,这是一个编程错误的迹象,或者它是一些其他特殊情况,你不想写丑陋的错误条件检查代码(例如,检查null),因为在这种情况下,捕获异常的可读性较低(您可以在另一个范围内执行)。
答案 1 :(得分:14)
抽象类AbstractQueue<E>
实现Queue<E>
并定义remove方法。
您可以查看源代码:
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
因此,正如您所见,remove()
方法使用 poll()
方法。
您可以使用自己喜欢的那种。
答案 2 :(得分:5)
看看答案,我不清楚做了什么,因此:
直接来自API: remove()和poll()方法的不同之处仅在于队列为空时的行为:remove()方法抛出异常,而poll()方法返回null
答案 3 :(得分:4)
当您知道如何立即做出反应和/或期望缺少元素时,请使用民意调查。
否则请使用删除。
答案 4 :(得分:2)
Remove()
方法与poll的不同之处仅在于,如果此队列为空,则抛出异常。
答案 5 :(得分:1)
有时您希望为空队列返回空值,有时您希望它将空队列视为异常情况。
答案 6 :(得分:0)
这两种方法在有关Queue结构的经典讨论中使用的方式不同。我主要使用poll()来检索项目,并且如果我需要在正常循环之外修改Queue,则主要删除()。