为什么我们在 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
中的 Offer
和 OfferLast
方法,因为这两种方法都在 end/tail 处添加了元素Deque
。它有什么意义?
因此您可以将同一个对象同时用作队列和双端队列。
Queue接口在Java5中添加,它定义了offer
方法,在最后添加一个元素。
(offer
方法和 add
方法都是 return 布尔值。它们的区别在于 add
允许拒绝元素,而 return仅当该元素已存在于集合中时才为 false。offer
方法可以因其他原因拒绝该元素,例如队列已满。)
有了 Queue.offer
,语义上几乎没有问题,因为元素通常被添加到队列的尾部并从头部移除。
在Java中添加了Deque接口 6.双端队列允许在头部和尾部添加和删除元素,所以Deque
定义了 offerFirst
和 offerLast
方法。双端队列也是一个队列,所以 Deque
是 Queue
的 sub-interface。因此它继承了 Queue
的 offer
方法。这就是 Deque
以 offer
和 offerLast
结束的方式。
我们或许可以在不添加 offerLast
的情况下通过,但这会在 Deque
界面中留下不对称。许多操作同时作用于头部和尾部(add、get、offer、peek、poll、remove)所以它们都具有 -first 和 -last 变体是有意义的,即使这增加了冗余。这种冗余也出现在其他 Queue
方法中,例如 add
和 addLast
、peek
和 peekFirst
、poll
和 pollFirst
,以及 remove
和 removeFirst
。
我试图理解,为什么我们需要 Deque
中的 Offer
和 OfferLast
方法,因为这两种方法都在 end/tail 处添加了元素Deque
。它有什么意义?
因此您可以将同一个对象同时用作队列和双端队列。
Queue接口在Java5中添加,它定义了offer
方法,在最后添加一个元素。
(offer
方法和 add
方法都是 return 布尔值。它们的区别在于 add
允许拒绝元素,而 return仅当该元素已存在于集合中时才为 false。offer
方法可以因其他原因拒绝该元素,例如队列已满。)
有了 Queue.offer
,语义上几乎没有问题,因为元素通常被添加到队列的尾部并从头部移除。
在Java中添加了Deque接口 6.双端队列允许在头部和尾部添加和删除元素,所以Deque
定义了 offerFirst
和 offerLast
方法。双端队列也是一个队列,所以 Deque
是 Queue
的 sub-interface。因此它继承了 Queue
的 offer
方法。这就是 Deque
以 offer
和 offerLast
结束的方式。
我们或许可以在不添加 offerLast
的情况下通过,但这会在 Deque
界面中留下不对称。许多操作同时作用于头部和尾部(add、get、offer、peek、poll、remove)所以它们都具有 -first 和 -last 变体是有意义的,即使这增加了冗余。这种冗余也出现在其他 Queue
方法中,例如 add
和 addLast
、peek
和 peekFirst
、poll
和 pollFirst
,以及 remove
和 removeFirst
。