gpt4 book ai didi

java - Java 的集合接口(interface)和类层次结构做得不好吗?

转载 作者:太空狗 更新时间:2023-10-29 22:48:25 25 4
gpt4 key购买 nike

我开始知道在 Java 中,LinkedList class implements both Deque and List接口(interface)。这让我有些困惑。

在计算机科学教学大纲中,从未有人教过我队列可以是一个列表,或者更准确地说,队列可以表现得像一个列表。也就是说,有些事情列表可以做,但队列不能。但是列表可以像队列一样工作。例如,List 接口(interface)有 the following methods :

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

但是队列 has only the following :

add(E e)

很明显 Queue 不允许在特定索引处插入,这在 List 中是允许的。其他操作也是如此,例如 Queue.remove()List.remove(int index)List.get(int index)Queue.peek()。换句话说,列表是一种更通用的数据结构,可以模拟Queue

现在能够模拟不同于拥有合约子集。也就是说,Queue 不允许 List 的某些操作(索引),并且只允许以特定方式完成某些操作(仅在尾部插入,仅从头部删除)。所以 Queue 并没有真正对 List 的契约进行“添加”。这就是为什么 Queue 没有扩展 Java 集合框架中的 List,而是都扩展了 Collection 接口(interface)。我相信这也是为什么任何类同时实现两者都是不正确的,因为 Queue 的契约(Contract)与 List 的契约(Contract)冲突(这就是为什么他们从 Collection接口(interface)分开)。但是,LinkedList 实现了这两个接口(interface)。

我也遇到了this回答:

The LinkedList implementation happens to satisfy the Deque contract, so why not make it implement the interface?

我仍然不明白我们怎么能说“LinkedList 实现恰好满足 Deque 契约”。队列的概念不允许在任意索引处插入。因此,Queue 接口(interface)没有这样的方法。

然而,我们只能通过接口(interface)执行契约,不能禁止某些方法的实现。作为列表(名称中有“List”),我觉得使用队列方法 peek()pop()add(int index , E 元素)LinkedList 中。

我相信,相反,我们应该有单独的类 LinkedQueue,它可以有队列的链接实现,类似于 LinkedBlockingQueue,它包含 BlockingQueue 的链接实现>。

另请注意,LinkedList 是唯一继承自列表和队列系列的类,也就是说,没有其他类同时实现了 List队列(AFAIK)。这是否表明 LinkedList 有问题?

我是不是完全错了,是不是多虑了?

最佳答案

您完全忽略了 programming to interface 的要点.

如果你需要一个Queue,你永远不会写:

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

因为,您是对的,这将允许您使用非队列方法。相反,您可以像这样对接口(interface)进行编程:

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

现在您只能访问 6 Queue方法(以及所有 Collection 方法)。所以,即使LinkedList实现了更多方法,您将无法再访问它们。

因此,如果您需要一个队列,您可以选择最适合您所需的性能、存储和访问特性的 Queue 接口(interface)的实现,例如


I was never taught that queue can be a list, or more precisely queue can behave like a list.

请记住,implements 定义了一个behaves like 关系。 LinkedList 表现得像 ListLinkedList 表现得像 DequeLinkedList 表现得像 Queue

但是仅仅因为 LinkedList 表现得像所有这些,并不意味着 List 表现得像 Queue 或者 Queue 表现得像 List。他们没有。

表现得像关系只有一种方式。

关于java - Java 的集合接口(interface)和类层次结构做得不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com