我正在查看LinkedList的java实现,并发现了这个:
public class LinkedList<E>
extends AbstractSequentialList<E> implements List<E>,
Deque<E>, Cloneable, java.io.Serializable
为什么LinkedList应该支持Deque接口? 我理解将元素添加到链表末尾的愿望,但这些方法应该在List界面中包含。
答案 0 :(得分:5)
LinkedList
实现恰好满足Deque
契约,那么为什么不让它实现接口?
答案 1 :(得分:3)
IIRC,deque
代表double end queue
。在您提到的情况下,将通用List
定义为双端队列是不合逻辑的。例如,ArrayList
不是为Deque
接口设计的。插入在列表的末尾是有效的,但绝对不是在它的开头(因为它会导致重新分配整个数组,我认为)。
另一方面,LinkedList
完全是为Deque
接口设计的,因为它是双链表。
答案 2 :(得分:2)
正如JavaDocs所述:
这些操作允许链表用作堆栈,队列或双端队列。
列表界面只是一个列表,即您可以添加或删除。所以List接口的基本实现必须提供那些简单的方法,例如数组列表。 Deque接口是双端队列和iava的LinkedList IS-A双端队列。
答案 3 :(得分:1)
因为可以使用LinkedList
之外的其他内容实现双端队列,并且一个代码可能依赖于具有此类功能的任何内容,因此Deque
接口需要单独提供。
List
本身不应该实现/扩展Deque
,因为从列表开头添加/删除可能不是每个实现都可以(轻松)支持的。