7

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

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

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

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

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

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

我希望这会有所帮助,正如我所说,我想我理解对我的要求我只是不确定我的迭代器适合所有这些。

4

2 回答 2

8

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

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

当然,如果Iterablea 是 a List,您可以实现a 根本Iterator没有任何“内部”访问,但您通常仍希望访问内部以进行检查(在迭代时在结构上修改 a 时modCount抛出 a )。 .. 并且如果您通过自身修改它以防止该异常)。ConcurrentModificationExceptionIterableIterator

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

于 2013-09-04T09:30:49.413 回答
1

你必须声明你自己的方法hasNext(), next(), remove(). 它必须知道如何迭代你自己的类,如何去下一个元素以及如何检查下一个元素是否存在。

于 2013-09-04T09:26:33.123 回答