我试图理解为什么我们在Offer中需要OfferLastDeque方法,因为这两种方法都在Deque的末尾添加元素。它的意义是什么?

最佳答案

Queue接口是在Java 5中添加的。它定义了offer方法,该方法在末尾添加了一个元素。

offer方法和add方法都返回布尔值。它们的区别在于,允许add拒绝该元素,并且仅当该元素已经存在于集合中时才返回false。offer方法可以拒绝出于其他原因(例如队列已满)。

使用Queue.offer时,对于语义几乎没有疑问,因为通常将元素添加到队列的尾部并从头部删除。

Deque接口是在Java 6中添加的。双端队列允许将元素添加到头部和尾部,也可以从其中删除元素,因此Deque定义了offerFirstofferLast方法。双端队列也是一个队列,因此DequeQueue的子接口。因此,它从offer继承了Queue方法。这就是DequeofferofferLast结束的方式。

我们可能无需添加offerLast就可以解决问题,但这会在Deque接口中留下不对称性。许多操作在头和尾上都可以进行(添加,获取,提供,窥视,轮询,删除),因此尽管它们增加了冗余性,但它们都具有-first和-last变体是有意义的。此冗余也发生在其他Queue方法中,例如addaddLastpeekpeekFirstpollpollFirst以及removeremoveFirst

08-03 13:58