创建自定义迭代器Java?

Sco*_*ott 6 java iterator

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

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

public class MyArrayList<T> implements Iterable<T> {
Run Code Online (Sandbox Code Playgroud)

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

public class MyIterator<T> implements Iterator<T>{
Run Code Online (Sandbox Code Playgroud)

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

我希望这有所帮助,正如我所说,我认为我理解我需要什么,我只是不确定我的迭代器适合所有这些.

Joa*_*uer 7

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

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

当然,如果Iterable是a,List你可以实现一个Iterator没有任何"内部"访问权限,但你通常仍然希望能够访问内部,例如检查modCount(在迭代ConcurrentModificationException时对Iterable结构进行修改时抛出). ..并且如果您通过自身修改它,则防止该异常Iterator).

*您可以使用您的Iterable实例本身实现它,但是一旦用户同时使用两个迭代器,这将破坏合同.