为什么java链表实现使用接口deque?

时间:2011-05-05 10:23:52

标签: java deque linked-list

我正在查看LinkedList的java实现,并发现了这个:

public class LinkedList<E> 
       extends AbstractSequentialList<E> implements List<E>,
               Deque<E>, Cloneable, java.io.Serializable

为什么LinkedList应该支持Deque接口? 我理解将元素添加到链表末尾的愿望,但这些方法应该在List界面中包含。

4 个答案:

答案 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,因为从列表开头添加/删除可能不是每个实现都可以(轻松)支持的。