在Java中插入Deque

时间:2013-03-26 14:31:33

标签: java deque insertion

我想知道this教程在引用以下内容时的含义。特别是我以粗体突出显示的部分。

  

插入

     

addfirstofferFirst方法在开头插入元素   Deque个实例。方法addLastofferLast插入   Deque实例末尾的元素。 当容量的时候   Deque实例受到限制,首选方法为offerFirst和   offerLast因为addFirst可能无法抛出异常   满。

  1. 为什么要首选?首选?
  2. 为什么addFirst如果已满,则无法抛出异常?如果能保证在这种情况下抛出异常,那不应该更好吗?

5 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为什么在使用受限制的版本时,您不希望在添加元素时抛出异常失败。这是因为你会期望一些失败,这就是你提出添加而不是坚持添加的原因。

答案 3 :(得分:0)

这意味着offerXXX方法返回boolean,而addXXX方法则不返回。{/ p>

因此,建议您使用offerXXX并检查布尔值是否成功,而不是期望从任一方法抛出异常。

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

答案 4 :(得分:-1)

根据Docs

<强> offerFirst:

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.

这意味着如果你使用带有容量限制的deque的addFirst,它可能会抛出异常,但是使用offerFirst不会抛出任何异常。

<强> offerLast

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和容量受限的deque,它可能会抛出异常,但使用offerLast不会抛出任何异常。