为什么我们在 Deque 中有 offer(E e) 和 offerLast(E e) 方法,即使它们解决的是相同的目的

why do we have offer(E e) and offerLast(E e) methods in Deque, even though they solve the same purpose

我试图理解,为什么我们需要 Deque 中的 OfferOfferLast 方法,因为这两种方法都在 end/tail 处添加了元素Deque。它有什么意义?

因此您可以将同一个对象同时用作队列和双端队列。

Queue接口在Java5中添加,它定义了offer方法,在最后添加一个元素。

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

有了 Queue.offer,语义上几乎没有问题,因为元素通常被添加到队列的尾部并从头部移除。

在Java中添加了Deque接口 6.双端队列允许在头部和尾部添加和删除元素,所以Deque 定义了 offerFirstofferLast 方法。双端队列也是一个队列,所以 DequeQueue 的 sub-interface。因此它继承了 Queueoffer 方法。这就是 DequeofferofferLast 结束的方式。

我们或许可以在不添加 offerLast 的情况下通过,但这会在 Deque 界面中留下不对称。许多操作同时作用于头部和尾部(add、get、offer、peek、poll、remove)所以它们都具有 -first 和 -last 变体是有意义的,即使这增加了冗余。这种冗余也出现在其他 Queue 方法中,例如 addaddLastpeekpeekFirstpollpollFirst,以及 removeremoveFirst