Java 如何定义自己的迭代器?

Java 如何定义自己的迭代器?,java,iterator,Java,Iterator,我已经编写了自己的链表类型数据结构,并希望创建一个迭代器对象,允许我在列表中的节点上进行迭代 是否可以直接定义我自己的迭代器,或者我首先需要将其转换为现有的数据结构,如LinkedList,并在此基础上调用iterator()?是的,任何类都可以实现。然后,从Iterator返回实现Iterator的另一个类(如前所述,通常是内部类) 在大多数情况下,这是相当直截了当的。但是,如果您有具体问题,我们可以提供帮助。请注意,remove是可选的 您可能还想实现,这是专门为列表设计的。您可以创建自己的

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


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

是的,任何类都可以实现。然后,从
Iterator
返回实现
Iterator
的另一个类(如前所述,通常是内部类)

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


您可能还想实现,这是专门为列表设计的。

您可以创建自己的类来实现。
在内部类中通常最容易做到这一点

然后在集合类中实现,并从
iterator()
方法返回迭代器类的新实例


您可能还应该实现更高的集合接口,例如。

您可以通过实现以下三种方法来定义自己的迭代器类:

最后一个方法是可选的:您可以将其实现为只抛出一个

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


一旦实现了迭代器类,让list类实现通常是很有帮助的。这为客户端代码提供了一种获取迭代器的方法。

您能为您的数据结构显示定义吗?您只需创建一个名为
Iterator
的新类,并实现
Iterator
接口。然后您只需实现
迭代器
接口所需的函数。这里是接口的链接:我以为Iterable只适合foreachloop@HunterMcMillen没有。这是一个常见的用例,但不是唯一的一个。@HunterMcMillen-这当然很有用。但它还有其他用途。啊,我明白了,我不知道。谢谢实现ListIterator要复杂得多。它的主要价值在于支持双向移动(以及可选的
set
方法)。如果不需要,我建议坚持使用
Iterable
boolean hasNext();
E next();
void remove();