创建自定义迭代器Java?

时间:2013-09-04 09:21:02

标签: java iterator

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

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

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

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

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

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

我希望有所帮助,正如我所说,我认为我理解了我的要求,但我并不完全确定我的迭代器适用于所有这些。

2 个答案:

答案 0 :(得分:6)

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

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

当然,如果IterableList,您可以实现Iterator而根本没有“内部”访问权限,但您通常仍希望能够访问内部的内容比如检查modCount(当你在迭代它时ConcurrentModificationException被结构修改时抛出Iterable ...如果你修改了阻止那个例外通过Iterator本身。

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

答案 1 :(得分:1)

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