4

当本教程提到以下解释时,我想知道本教程的含义。特别是我以粗体突出显示的部分。

插入

addfirst和方法在实例的offerFirst开头插入元素。实例末尾的Deque方法addLast和插入元素。实例的容量受到限制时,首选方法是and 因为如果它已满,可能无法抛出异常。offerLastDequeDequeofferFirstofferLastaddFirst

  1. 为什么首选 offerFirst?
  2. 如果 addFirst 已满,为什么会无法抛出异常?如果它保证在这种情况下抛出异常不是更好吗?
4

5 回答 5

1

我认为这两种方法都是合法的(尽管 offerXXX 方法更可能用于有界出队)。

如果您的代码假设队列中有可用空间,并且此假设对代码的正确性至关重要,请使用 addFirst/addLast。抛出的运行时异常 (IllegalStateException) 非常适合这个 bug 场景。

另一方面,如果一个完整的队列是一种正常情况,请不要使用异常来处理它。使用 offerFirst/offerLast,并检查返回值。

于 2013-03-26T14:36:52.050 回答
0

如果双端队列有达到容量的风险,OfferFirst 是首选方法。如果已达到容量 addFirst 将抛出异常,其中 offerFirst 返回一个布尔值 (true/false) 以指示添加是否成功。offerFirst 在此双端队列的前面插入指定元素,除非它违反容量限制。当使用容量受限的双端队列时,此方法通常优于 addFirst(E) 方法,后者仅通过抛出异常可能无法插入元素。

于 2013-03-26T14:42:51.193 回答
0

为什么在使用受限版本时您不希望在添加元素失败时引发异常。这是因为您会预料到会出现一些失败,这就是您提供添加而不是坚持添加的原因。

于 2013-03-26T14:43:27.237 回答
0

这意味着offerXXX方法返回boolean,而addXXX方法不返回。

因此,建议您使用offerXXX并检查布尔值是否成功,而不是期望任何一种方法都会引发异常。

这是非常糟糕的措辞。Javadoc 也是如此。

于 2013-03-26T15:01:59.007 回答
-1

根据文档

报价第一:

Inserts the specified element at the front of this deque unless it would violate capacity restrictions. When using a capacity-restricted deque, this method is generally preferable to the addFirst(E) method, which can fail to insert an element only by throwing an exception.

这意味着如果您将 addFirst 与容量受限的双端队列一起使用,它可能会引发异常,但使用 offerFirst 不会引发任何异常。

报价最后

Inserts the specified element at the end of this deque unless it would violate capacity restrictions. When using a capacity-restricted deque, this method is generally preferable to the addLast(E) method, which can fail to insert an element only by throwing an exception.

同样,如果您将 addLast 与容量受限的双端队列一起使用,它可能会引发异常,但使用 offerLast 不会引发任何异常。

于 2013-03-26T14:34:22.627 回答