LinkedList类实现了Deque和List接口

  • Post author:
  • Post category:其他


Java的集合、接口和类层次结构做得不好吗?

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

我开始知道在Java中,


LinkedList

类实现了两者

Deque



List


接口。这对我来说有点混乱。

在计算机科学教学大纲中,我从未被教导过队列可以是一个列表,或者更确切地说,队列可以像列表一样。也就是说,列表可以做的东西,但队列不能。但是列表可以像队列一样运行。例如,

List

interface具有

以下方法

add(E e)
add(int index, E element)



Queue


只有以下内容

add(E e)

所以很明显

Queue

不允许在特定索引处插入,这是允许的

List

。其他操作的情况也是如此,例如

Queue.remove()

vs.

List.remove(int index)



List.get(int index)

vs

Queue.peek()

.。换句话说,list是一种更通用的数据结构,可以模拟

Queue

现在能够模拟与拥有合同子集不同。也就是说,

Queue

不允许某些操作(索引)

List

并允许某些操作仅以特定方式完成(仅插入尾部并仅从头部移除)。所以

Queue

并没有真正对合同进行“补充”

List

。这正是为什么

Queue

不在

List

Java集合框架中扩展,而是扩展

Collection

接口。我认为这也是为什么任何一个类都不能实现两者的原因,因为

Queue

合同与合同冲突

List

(这就是为什么它们从

Collection

接口分开)。但是,

LinkedList

实现两个接口。

我也遇到了

这个

答案:



LinkedList

实施情况,以满足

Deque

合同,所以为什么不把它实现的接口?

我仍然不明白我们怎么说“

LinkedList

实施恰好满足

Deque

合同”。队列的概念不允许插入任意索引。因此,

Queue

界面没有这样的方法。

但是,我们只能通过接口强制执行合同,并且不能禁止某些方法的实现。作为列表(在其名称“列表”),我觉得这是不正确的有排队的方法

peek()



pop()



add(int index, E element)



LinkedList

我相信,相反,我们应该有一个单独的类

LinkedQueue

,它可以链接队列的实现,类似于

LinkedBlockingQueue

包含链接的实现

BlockingQueue

另请注意,这

LinkedList

是唯一一个继承自列表和队列系列的类,也就是说,没有其他类可以实现这两个类

List



Queue

(AFAIK)。这可以表明

LinkedList

做得不好吗?

我错了,不必要地思考?

写回答关注邀请回答

提问于 2018-10-22

2 个回答

热门排序

用户回答回答于 2018-10-22

完全忽略了

编程接口的重点

如果你需要

Queue

,你永远不会写:

LinkedList<String> queue = new LinkedList<>();

因为,你是对的,这将允许你使用非队列方法。相反,你编程到这样的界面:

Queue<String> queue = new LinkedList<>();

现在您只能访问6


Queue


种方法(以及所有


Collection


方法)。因此,即使


LinkedList


实现了更多方法,您也无法再访问它们。

因此,如果您需要队列,则选择最适合您所需的性能,存储和访问特性的接口

实现


Queue

,例如

我从来没有被教过队列可以是一个列表,或者更确切地说队列可以像列表一样。

请记住,

implements

定义一种

行为类似的

关系。一个

LinkedList


行为就像

一个

List

。一个

LinkedList


行为就像

一个

Deque

。一个

LinkedList


行为就像

一个

Queue

但仅仅因为

LinkedList

表现得像所有这些,并不意味着

List


表现得像

一个

Queue



Queue


表现得像

一个

List

。他们不。



样的行为

关系唯一无二的一种方式