Java 中的所有 ADT 都需要迭代器吗?

Do all ADTs in Java need to have iterators?

我正在阅读 Robert Sedgewick 的算法一书,我看到了关于 ADT 的第 1.3 章,我有几个问题。

java 中的所有 ADT 都是可迭代的吗?

这是否意味着我们每次实现 ADT 时都必须实现一个迭代器?

如果是这样,我是否为迭代器创建一个单独的 API?因为在第141页他专门为Iterator做了一个接口。

我和一个朋友聊天,他说"An instance of an ADT can be modified (i.e. elements added/deleted/or modified) when iterated"这不是错的,因为包中的元素不能被移除吗?

抽象数据类型只不过是一组操作以及这些操作的契约。通常,ADT 可能有多种实现方式,可能会显示不同的非功能特性(例如 运行 操作时间)或在合同中未指定的区域中的不同行为。如果迭代是操作之一,则取决于具体 ADT 的性质。它不必。

在Java中,您只能定义操作的签名(例如在接口中)。合同必须以非正式方式给出,例如 Javadoc.