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

时间:2010-09-30 14:28:12

标签: java collections iterator arraylist

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

Iterator iter = myList.iterator();
while(iter.hasNext())
{
    MyObj myObj = (MyObj)iter.next();
    doPrint(myObj.toString());
}

我第二次称呼它:

while(iter.hasNext())
{
    MyObj myObj = (MyObj)iter.next();
    doPrint(myObj.toString());
}

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

3 个答案:

答案 0 :(得分:33)

第二个循环中的

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

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

答案 1 :(得分:9)

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

  • hasNext()
  • 下()
  • 删除()

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

答案 2 :(得分:3)

第二部分不会被执行,因为iter.hasNext()返回false ...