【发布时间】:2018-08-31 16:46:39
【问题描述】:
我试图理解,为什么我们需要Deque 中的Offer 和OfferLast 方法,因为这两种方法都在Deque 的末尾/尾部添加元素。它有什么意义?
【问题讨论】:
标签: java collections java-6 deque
我试图理解,为什么我们需要Deque 中的Offer 和OfferLast 方法,因为这两种方法都在Deque 的末尾/尾部添加元素。它有什么意义?
【问题讨论】:
标签: java collections java-6 deque
Queue 接口是在 Java 5 中添加的。它定义了 offer 方法,该方法在末尾添加一个元素。
(offer 方法和add 方法都返回布尔值。它们的不同之处在于,add 被允许拒绝元素并且只有当元素已经存在于集合中时才返回 false。offer方法可以出于其他原因拒绝该元素,例如队列已满。)
对于Queue.offer,语义几乎没有问题,因为元素通常添加到队列的尾部并从头部移除。
Deque 接口是在 Java 6 中添加的。双端队列允许向头部和尾部添加和删除元素,因此 Deque 定义了 offerFirst 和 offerLast方法。双端队列也是队列,所以Deque 是Queue 的子接口。因此它从Queue 继承了offer 方法。这就是Deque 以offer 和offerLast 结尾的方式。
我们可能不添加offerLast 就可以解决问题,但这会在Deque 界面中留下不对称性。许多操作在头部和尾部都起作用(添加、获取、提供、查看、轮询、删除),因此所有操作都具有 -first 和 -last 变体是有意义的,即使这会增加冗余。其他Queue 方法也会出现这种冗余,例如add 和addLast、peek 和peekFirst、poll 和pollFirst,以及remove 和removeFirst。
【讨论】:
因此您可以将同一个对象同时用作队列和双端队列。
【讨论】: