为什么我不能在Scala中再次使用迭代器

为什么我不能在Scala中再次使用迭代器,scala,Scala,关于迭代器的两个问题 问题1)为什么迭代器的实现方式无法重用?它是否实现了内存优化 scala> while (it.hasNext) println(it.next) 1 2 3 4 5 scala> while (it.hasNext) println(it.next) scala> 问题2)迭代器是如何实现的?是否迭代器仅指向集合的一个元素,如果存在下一个元素,则迭代器的上一个值将被覆盖?类似于LinkedList的东西,其逻辑类似于if(node->next!=n

关于迭代器的两个问题

问题1)为什么迭代器的实现方式无法重用?它是否实现了内存优化

scala> while (it.hasNext) println(it.next)
1
2
3
4
5

scala> while (it.hasNext) println(it.next)

scala>

问题2)迭代器是如何实现的?是否
迭代器
仅指向集合的一个元素,如果存在下一个元素,则迭代器的上一个值将被覆盖?类似于LinkedList的东西,其逻辑类似于if(node->next!=null)node=node->next注意到方法
hasNext()
?该方法告诉您“所有内容都被迭代”的时间。为什么在方法之前告诉您:“您看到了所有元素”之后,您希望该方法再次返回true?迭代器如何“知道”您决定再次访问所有(或部分)条目

(大多数)迭代器实现的全部要点是:使用它以特定顺序“迭代”某个对象

整个概念的重点是“按一定顺序迭代”。因此,您重复使用同一迭代器的想法与迭代器的基本想法不“相符”


当然,您可以创建自己的迭代器实现,允许“重置”迭代器。但正如前面所说:这将是您需要自己实现的东西。

考虑一个表示随机数流或用户输入的迭代器。