为什么java链表实现使用接口队列



我正在查看LinkedList的java实现,发现如下:

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

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

LinkedList的实现恰好满足了Deque的契约,那么为什么不让它实现接口呢?

如JavaDocs所述:

这些操作允许链表用作堆栈、队列或双端队列。

List接口只是一个List,也就是说你可以添加或删除。因此,List接口的基本实现必须只提供那些简单的方法,例如ArrayList。Deque接口是双端Queue和iava的LinkedList is - a双端Queue。

IIRC, deque代表double end queue。在您提到的情况下,将泛型List定义为deque是不符合逻辑的。例如,ArrayList不是为Deque接口设计的。插入在列表的末尾是有效的,但绝对不是在列表的开头(因为它会导致整个数组的重新分配,我认为)。

另一方面,LinkedList是为Deque接口完美设计的,因为它是一个双链表。

由于双端队列可能使用LinkedList以外的东西来实现,并且代码可能依赖于具有此类功能的任何东西,因此需要单独提供Deque接口。

List本身不应该实现/扩展Deque,因为在列表的开头添加/删除可能不是每个实现都可以(容易地)支持的。

相关内容

  • 没有找到相关文章

最新更新