【发布时间】:2016-08-17 05:14:46
【问题描述】:
下面,我有一个名为Sigma 的集合的迭代器。当while 循环完成时,如何将迭代器重置为其第一个元素?
Iterator it = Sigma.iterator();
while (it.hasNext()) {
letter = (String)it.next();
System.out.println(letter);
}
【问题讨论】:
-
我认为你不应该。要重置,只需从底层数据结构中获取一个新的迭代器。
Iterator是一个接口,只提供了3个方法,hasNext、next和remove。 -
嘿伙计们,你真的没有通过从底层数据结构请求新的迭代器来解决问题,你只是在逃避这种情况下的问题,如果底层数据结构已经改变会发生什么自从我们上次得到一个迭代器??
-
和OP,你为什么需要重置迭代器?再次迭代它?只在一个循环中做你想做的事,为什么要把它分成2个循环??
-
@LaVloZMerrill “如果自从我们上次获得迭代器后底层数据结构发生了变化,会发生什么?” 我想你是在想象迭代器存储一个集合创建时的状态快照,但对于大多数集合,包括 OP 的
HashSet,情况并非如此。它直接从集合中读取,并且在迭代期间添加或删除任何值都是无效的,除了通过Iterator.remove()方法删除当前迭代的值之外,因此任何其他修改都不是问题,因为你是不允许这样做。 -
@Boann 我不是在想象,我是在笼统地说,如果 Iterator 是否存储快照,这是一个实现细节。
标签: java collections iterator hashset