我已经编写了自己的链表类型数据结构,并希望创建一个Iterator对象,允许我迭代列表中的节点。
是否可以直接定义我自己的迭代器,还是首先需要将其转换为现有的数据结构,如LinkedList
并在其上调用iterator()
?
答案 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
,专门用于列表。