【问题标题】:What happens if you call the same iterator twice on the same collection?如果你在同一个集合上调用同一个迭代器两次会发生什么?
【发布时间】:2011-04-19 09:27:52
【问题描述】:

如果我为 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());
}

我第二次调用它时它会回到集合的开头吗?

【问题讨论】:

  • 为什么不自己试试呢?
  • java.util.ConcurrentModificationException

标签: java collections iterator arraylist


【解决方案1】:

第二个循环中的iter.hasNext()会立即返回false,所以循环内的代码不会被执行。

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

【讨论】:

  • +1 以明确第二次调用 .iterator() 的结果。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    • hasNext()
    • 下一个()
    • 删除()

    所以没有办法告诉迭代器“重置”、“从头开始”或“返回”。一旦它位于底层序列的最后一个元素上,它就完成了它的工作,不需要保留引用。耳语 R.I.P 并让它遇见 Big GC。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2013-10-26
      • 2018-01-10
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      相关资源
      最近更新 更多