【问题标题】:Do all ADTs in Java need to have iterators?Java中的所有ADT都需要迭代器吗?
【发布时间】:2018-09-14 13:51:56
【问题描述】:

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

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

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

如果是这样,我是否为迭代器制作单独的 API?因为在第 141 页,他为迭代器制作了一个接口。

我在和一位朋友交谈,他说“迭代时可以修改 ADT 的实例(即添加/删除/或修改元素)”这不是错误的,因为在包中元素不能被删除?

【问题讨论】:

  • 我从您的帖子中删除了不相关的问题,因为我们希望在此处每个帖子都有一个问题。请随时在单独的问题帖子中提问(您可以在revision history 中找到旧版本)。虽然有点难以理解你想在那里问什么。
  • 他在书中提到迭代器很重要以及它们如何帮助我们处理数据。但是任何人都可以实现 ADT,这是否意味着我们也必须实现迭代器?
  • 你可能想阅读What is an abstract data type in object oriented programming? 我倾向于说你所有提到的“ADT”都应该替换为“class”。
  • 我更多地考虑堆栈、袋子和队列,它们有迭代器。但假设有人手动实现了类似的事情。这就是我使用 ADT 的原因

标签: java algorithm generics abstract-data-type


【解决方案1】:

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

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

【讨论】:

  • 据我了解,答案是否定的?
  • 没错。 ADT 不必是可迭代的。
  • 谢谢。我真的一直在思考这个问题
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2015-07-08
  • 2011-02-17
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多