如何定义自己的迭代器?

时间:2011-11-27 17:31:38

标签: java iterator

我已经编写了自己的链表类型数据结构,并希望创建一个Iterator对象,允许我迭代列表中的节点。

是否可以直接定义我自己的迭代器,还是首先需要将其转换为现有的数据结构,如LinkedList并在其上调用iterator()

3 个答案:

答案 0 :(得分:6)

您可以通过实现Iterator interface的三种方法来定义自己的Iterator类:

boolean hasNext();
E next();
void remove();

最后一个方法是可选的:你可以实现它只是抛出一个UnsupportedOperationException

最常见的策略是使实际的类成为列表类的私有成员类。这样它就可以访问你班级的私人簿记数据;这通常是实现高效迭代器所必需的。

一旦实现了迭代器类,列表类实现Iterable通常会有所帮助。这为客户端代码提供了获取迭代器的方法。

答案 1 :(得分:3)

您可以创建自己的实现Iterator<T>的类 在内部阶级中通常最容易做到这一点。

然后,您将在集合类中实现Iterable<E>,并从iterator()方法返回迭代器类的新实例。

您可能还应该实现更高的集合接口,例如List<E>

答案 2 :(得分:0)

是的,任何课程都可以实施Iterable。然后,您返回另一个从Iterator实现iterator的类(如上所述,通常是内部类)。

在大多数情况下,这是相当直截了当的。但是,如果您有具体问题,我们可以提供帮助。请注意,remove是可选的。

您可能还想实施ListIterator,专门用于列表。