我对如何在 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/