为什么呢?那么将迭代器项指针移动到第一个位置的最佳方法是什么?
答案 0 :(得分:34)
为什么?
因为如果你强制迭代器有一个重置方法每个迭代器必须有一个重置方法。这为每个迭代器编写者提供了额外的工作。另外一些迭代器很难重置(或者非常昂贵),你不希望用户调用它们的重置。文件或流的迭代器就是很好的例子。
将迭代器项指针移动到第一个位置的最佳方法是什么?
创建一个新的迭代器。它很少比重置更贵。
答案 1 :(得分:6)
读取流后,如果不再次打开源,则无法重新读取。这就是流和迭代器的工作方式。
答案 2 :(得分:3)
最好的方法是创建一个新的!
答案 3 :(得分:3)
这是JCF采用的一般趋势 - 保持界面简约,除非这使得某些功能极难工作。这就是为什么你没有单独的语义接口,如不可变集合,固定大小的集合..
至于为什么然后提供remove(Object)
(作为可选) - 不提供这将使得在迭代集合时无法安全地从集合中移除项目 - 没有任何东西可以提供{{ 1}}如此强迫。
同样,为什么有一个单独的reset()
(提供ListIterator()
和previous()
等方法) - 使用previousIndex()
接口,正在使用的主要功能是能够使用索引布置元素,并能够使用索引顺序(无论是固定顺序还是随机顺序)访问它们。其他集合不是这种情况。不为List
提供此界面将使列表顺利运行变得非常困难。
答案 4 :(得分:2)
提示:创建迭代器变量作为函数,然后您可以根据需要多次使用它。这仅在基础逻辑可重复时才有效。
Scala中的示例(Java类似,但我没有Java REPL方便)
def i = (1 to 100) iterator // i is our iterator
i.grouped(50) foreach println // prints two groups
i.grouped(50) foreach println // prints same two groups again