如果在同一个集合上调用两次相同的迭代器会发生什么?

Chr*_*ris 9 java collections iterator arraylist

如果我为myList设置了一个迭代器:

Iterator iter = myList.iterator();
while(iter.hasNext())
{
    MyObj myObj = (MyObj)iter.next();
    doPrint(myObj.toString());
}
Run Code Online (Sandbox Code Playgroud)

我称之为第二次:

while(iter.hasNext())
{
    MyObj myObj = (MyObj)iter.next();
    doPrint(myObj.toString());
}
Run Code Online (Sandbox Code Playgroud)

我第二次打电话给它时会回到收藏的开头吗?

Boz*_*zho 34

iter.hasNext()在第二个循环中将false立即返回,因此循环内的代码将不会被执行.

但是,如果重新创建迭代器(by list.iterator()),迭代将从头重新开始.


And*_*s_D 11

迭代器接口只提供三种方法:

  • hasNext()
  • 下一个()
  • 去掉()

所以没有办法告诉迭代器"重置","从头重启"或"返回".一旦它位于底层序列的最后一个元素上,就完成了它的工作,并且不需要保留引用.Whisper RIP并使其符合Big GC.