java - 创建自定义迭代器 Java?

标签 java iterator

我对如何在 Java 中为类实现自定义迭代器感到有点困惑。我需要在不使用我已经可用的内置库的情况下制作一个 ArrayList。我了解创建类的基础知识,但我无法理解如何让 Iterator 适应所有这些。我有以下内容:

我创建了一个实现可迭代接口(interface)的通用类,它看起来像这样:

public class MyArrayList<T> implements Iterable<T> {

然后我必须创建一个名为 MyIterator 的类,根据文档的措辞,它是一个独立的类。这看起来相当简单我创建了一个名为 MyIterator 的新类并让它实现迭代器接口(interface)所以它看起来像这样:

public class MyIterator<T> implements Iterator<T>{

我的困惑在于以下几点。该文档说 Iterator 需要在它自己的类中,但是我如何访问“MyArrayList”中的数据成员以完全实现 hasNext() 和 next() 等。由于底层数组中的数据成员是私有(private)的(它们应该是私有(private)的),我看不出外部类如何完全实现这些方法。我误解了什么是必需的吗?通过单独的类,它是否仍然是“MyArrayList”类的一部分,但定义不同?

我希望这对您有所帮助,正如我所说的,我想我明白我需要什么,我只是不确定我的迭代器适合所有这些。

最佳答案

虽然迭代器必须是一个单独的类 *,但该类可能与您的 Iterable 类有某种关系。

它通常是一个嵌套/内部类,正是因为它需要访问类的值(而这正是内部类的主要用途)。

当然,如果 Iterable 是一个 List,您可以实现一个 Iterator 而根本不需要任何“内部”访问,但您通常仍然想要访问内部结构以进行诸如检查 modCount 之类的事情(当 Iterable 在结构上被修改时抛出 ConcurrentModificationException,同时迭代它... 并在您通过 Iterator 本身修改它时防止该异常)。

* 您可以使用您的Iterable 实例本身来实现它,但是一旦用户同时使用两个迭代器,这就会破坏契约。

关于java - 创建自定义迭代器 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609955/

相关文章:

java - 通过 Web 服务和重复间隔进行 BIP 调度

java - 查找给定参数的数组索引

c++ - "no matching function call..."这个错误是从哪里来的,我该如何解决?

c++ - begin()是有效的迭代器操作吗?如果是,它指的是什么?

arrays - Typescript array.from(iterator) 类型不正确,无法转换?

java - hibernate 还是 JPA?

java - 如何在页面加载时打开模态对话框

Java Swing 字体选择器

typescript - 遍历 Typescript Map

java - 在 for 循环中嵌套 string.splits - 分配时内部 split 得到 NPE