【发布时间】:2017-05-23 19:10:10
【问题描述】:
我目前正在在线学习算法课程,我们的教科书是 Pat Morin 的开放数据结构。
在他对ArrayDeque、Morin claims 的讨论中,“ArrayDeque 数据结构允许在两端进行有效的添加和删除。这个结构实现了List 接口。”然后他继续讨论数据结构的 C++ 实现,包括预期的 List 方法:get(i)、set(i, x)、add(i, x) 和 remove(i)。
我发现作者的处理方式令人困惑,因为我无法想象这个实现如何被视为Deque;毕竟,它具有在任何位置插入/删除的功能。
另一方面,其他资源表明ArrayDeque 实现了Deque 接口(“duh”,对吗?)。事实上,this article 声称,“ArrayDeque 是 Deque 接口的基于数组的实现。”此外,“ArrayDeque 与LinkedList 不同,它没有实现List 接口,因此我们从未考虑将其用于位置访问。”这种处理对我来说非常有意义,而且它似乎遵循了我发现的各种文章的共识。
莫林的书是不是错了,还是我遗漏了一些基本的东西?
【问题讨论】:
-
如果您查看 Java API
ArrayDeque确实实现了Deque -
ArrayDeque 数据结构支持两端高效的插入和移除,因此将其用作Deque 是完全合理的。相比之下,ArrayList 只支持末尾的高效插入和删除,因此您可以将其用作堆栈,但不应将其用作队列。两种数据结构都支持高效的随机访问和迭代,因此您可以使用其中任何一种作为随机访问列表,即使 Java 没有在它们的 ArrayDeque 上实现 List
-
@yurikilochek 仅仅因为问题提到了 Java 中存在的东西并不意味着它们是唯一存在的地方。这似乎是关于一般数据结构,而不是任何给定的实现。第一个链接是 C++ 相关的。
-
@Dukeling 很公平。
标签: data-structures computer-science