我试图理解为什么我们在Offer
中需要OfferLast
和Deque
方法,因为这两种方法都在Deque
的末尾添加元素。它的意义是什么?
最佳答案
Queue接口是在Java 5中添加的。它定义了offer
方法,该方法在末尾添加了一个元素。
(offer
方法和add
方法都返回布尔值。它们的区别在于,允许add
拒绝该元素,并且仅当该元素已经存在于集合中时才返回false。offer
方法可以拒绝出于其他原因(例如队列已满)。
使用Queue.offer
时,对于语义几乎没有疑问,因为通常将元素添加到队列的尾部并从头部删除。
Deque接口是在Java 6中添加的。双端队列允许将元素添加到头部和尾部,也可以从其中删除元素,因此Deque
定义了offerFirst
和offerLast
方法。双端队列也是一个队列,因此Deque
是Queue
的子接口。因此,它从offer
继承了Queue
方法。这就是Deque
以offer
和offerLast
结束的方式。
我们可能无需添加offerLast
就可以解决问题,但这会在Deque
接口中留下不对称性。许多操作在头和尾上都可以进行(添加,获取,提供,窥视,轮询,删除),因此尽管它们增加了冗余性,但它们都具有-first和-last变体是有意义的。此冗余也发生在其他Queue
方法中,例如add
和addLast
,peek
和peekFirst
,poll
和pollFirst
以及remove
和removeFirst
。