如何在Java中重置迭代器?

如何在Java中重置迭代器?,java,collections,iterator,hashset,Java,Collections,Iterator,Hashset,下面,我有一个名为Sigma的集合迭代器。当while循环完成时,如何将迭代器重置为其第一个元素 Iterator it = Sigma.iterator(); while (it.hasNext()) { letter = (String)it.next(); System.out.println(letter); } 我没有对迭代器做太多的工作,但我猜您可以将迭代器设置为其原始状态 Iterator it = Sigma.iterator(); while(it.ha

下面,我有一个名为
Sigma
的集合迭代器。当
while
循环完成时,如何将迭代器重置为其第一个元素

Iterator it = Sigma.iterator();

while (it.hasNext()) {
    letter = (String)it.next();
    System.out.println(letter);
}

我没有对迭代器做太多的工作,但我猜您可以将迭代器设置为其原始状态

Iterator it =  Sigma.iterator();

while(it.hasNext()){
    letter= (String) it.next();
    System.out.println(letter);
}

it =  Sigma.iterator();

迭代器没有重置方法,也不需要重置方法。收藏不像是需要倒带的盒式磁带。您可以简单地放弃旧的迭代器


每次调用
.iterator()
,集合都会返回一个从开头开始的新迭代器。

我认为您不应该这样做。要重置,只需从底层数据结构获取一个新的迭代器
Iterator
是一个仅提供3种方法的接口,
hasNext
next
remove
。嘿,伙计们,从底层数据结构请求新的迭代器并不是解决问题的方法,在这种情况下,您只是逃避问题,如果自上次我们得到迭代器以来,底层数据结构发生了变化,那么会发生什么?OP,为什么需要重置迭代器??再重复一遍??只要在单循环中做你想做的事情,为什么要将其拆分为两个循环???@LaVloZMerrill“如果自上次我们获得迭代器以来基础数据结构发生了变化,会发生什么情况?”“我想你是在想象迭代器在创建时存储集合状态的快照,但对于大多数集合,包括OP的HashSet,情况并非如此。它直接从集合中读取,在迭代过程中添加或删除任何值都是无效的,唯一的例外是通过
Iterator.remove()
方法删除当前迭代的值,因此任何其他修改都不是问题,因为不允许您这样做。@Boann我没有想象,一般来说,如果迭代器是否存储快照,这是一个实现细节。这不是将迭代器设置为其原始状态,而是从Sigma请求新的迭代器,如果Sigma值没有更改其OK值,但它已经更改了什么?(从Sigma中添加或删除新值),您将得到具有不同值的新迭代器。@LaVloZMerrill这是一个很好的观点。我想唯一的解决方案是在开始时创建一个Sigma的深度副本,然后将其用于迭代。@RayondKelly这个问题有很多解决方案,你可以制作一个接受迭代器的可重置迭代器,这个可重置迭代器将首先在提供的迭代器上迭代,将每个对象迭代处理为一个内部数组,然后在重置时,它会将其索引返回到第一个(一种低效的方法),另一种简单的方法,只需确保底层数据结构不会更改,在发生集合的情况下,您可以通过集合装饰类来强制此行为。不可修改的XXX方法,当然可能存在其他解决方案:)