如果你在同一个集合上调用同一个迭代器两次会发生啥?
Posted
技术标签:
【中文标题】如果你在同一个集合上调用同一个迭代器两次会发生啥?【英文标题】: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 【参考方案1】:第二个循环中的iter.hasNext()
会立即返回false
,所以循环内的代码不会被执行。
但是,如果您重新创建迭代器(通过list.iterator()
),迭代将从头开始。
【讨论】:
+1 以明确第二次调用 .iterator() 的结果。【参考方案2】:第二部分不会执行,因为iter.hasNext()返回false...
【讨论】:
【参考方案3】:迭代器接口只提供了三个方法:
hasNext() 下一个() 删除()所以没有办法告诉迭代器“重置”、“从头开始”或“返回”。一旦它位于底层序列的最后一个元素上,它就完成了它的工作,不需要保留引用。耳语 R.I.P 并让它遇见 Big GC。
【讨论】:
以上是关于如果你在同一个集合上调用同一个迭代器两次会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
Nuxt apollo 智能查询被调用了两次。引擎盖下会发生啥?