Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中(或一般情况下),迭代器应该是可重用的还是设计为一次性使用的?_Java_Iterator - Fatal编程技术网

在Java中(或一般情况下),迭代器应该是可重用的还是设计为一次性使用的?

在Java中(或一般情况下),迭代器应该是可重用的还是设计为一次性使用的?,java,iterator,Java,Iterator,我知道每当执行foreach循环时,就会创建、使用一个新迭代器,然后再也不会使用 我的问题是关于为自定义类实现迭代器。按照惯例,应该使用代码创建迭代器吗 Iterator<E> it = new myClass.iterator(); Iterator it=newmyclass.Iterator(); 能够被重用——也就是说,我的自定义迭代器类是否出于某种原因支持对元素进行多次迭代,或者实现一个Iterable类的API的用户如果想要再次迭代元素,是否知道创建一个新的迭代器是一

我知道每当执行foreach循环时,就会创建、使用一个新迭代器,然后再也不会使用

我的问题是关于为自定义类实现迭代器。按照惯例,应该使用代码创建迭代器吗

Iterator<E> it = new myClass.iterator();
Iterator it=newmyclass.Iterator();
能够被重用——也就是说,我的自定义迭代器类是否出于某种原因支持对元素进行多次迭代,或者实现一个Iterable类的API的用户如果想要再次迭代元素,是否知道创建一个新的迭代器是一种惯例


我希望我的问题不要太含糊;我试图尽可能地具体,而不违反我正在学习的类的代码共享规则。我最感兴趣的是学习迭代器的常规用法。我还认为,在大多数情况下,用户只需要一次性使用迭代器,但希望获得更多关于在何处使用、需要或需要可重用迭代器的见解。谢谢

由于迭代器接口仅在一个方向上移动(它支持
next()
,但不支持
previous()
),因此不可重用

有关更多信息:

由于迭代器接口仅在一个方向上移动(它支持
next()
,但不支持
previous()
),因此不可重用

有关更多信息:

正如其他人指出的,没有办法将迭代器重置为集合的开头,因此它是不可重用的

这不仅适用于java,也适用于C

您可能认为可以创建一个迭代器作为集合类的成员,每次请求一个新的迭代器时,都可以重置它并返回它


这也行不通,因为集合类的调用方可能会启动嵌套在另一个迭代中的迭代,因此嵌套的迭代会干扰外部迭代。

正如其他人所指出的,无法将迭代器重置为集合的开始,因此它是不可重用的

这不仅适用于java,也适用于C

您可能认为可以创建一个迭代器作为集合类的成员,每次请求一个新的迭代器时,都可以重置它并返回它


这也行不通,因为集合类的调用方可能会启动嵌套在另一个迭代中的迭代,因此嵌套的迭代会干扰外部迭代。

迭代器不可重用;每次迭代元素时,都需要从Iterable集合中获取一个新的迭代器

欲了解更多信息,请参阅下面的stackoverflo应答链接:gustafc应答:


迭代器是不可重用的;每次迭代元素时,都需要从Iterable集合中获取一个新的迭代器

欲了解更多信息,请参阅下面的stackoverflo应答链接:gustafc应答:


怎么可能允许多次迭代?迭代器()中没有reset()方法允许它从一开始就重新启动。这就是我问这个问题的原因。这似乎是不可能的(至少在我的实现中),但我想确保我没有遗漏什么。我很欣赏第二句话中的解释,尽管第一句话的语气不同。怎么可能允许重复多次?迭代器()中没有reset()方法允许它从一开始就重新启动。这就是我问这个问题的原因。这似乎是不可能的(至少在我的实现中),但我想确保我没有遗漏什么。我很欣赏第二句中的解释,尽管第一句的语气是一样的。谢谢,这非常清楚地解释了原因,并且+1澄清了它不仅限于Java语言。完全按照我需要知道的回答了我的问题。谢谢,这非常清楚地解释了原因,并且+1澄清了它不仅仅限于Java语言。回答我的问题完全符合我的要求。