M.J*_*.J. 4 java foreach iterator for-loop list
我处于一个非常特殊的状态.我有一个如下列表: -
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
Run Code Online (Sandbox Code Playgroud)
现在当我进行多种类型的遍历时,比如使用高级for,iterator和normal for循环,下面是示例代码片段: -
1>高级循环: -
try {
for(String a : list) {
System.out.println(a);
list.add("f");
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
2>迭代器: -
try {
Iterator<String> itr = list.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
list.add("f");
}
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
3>正常循环: -
for (int i=0;i<list.size();i++) {
System.out.println(list.get(i));
list.add("f");
}
Run Code Online (Sandbox Code Playgroud)
现在,一个特殊的问题是,当使用高级for循环和迭代器时,我得到以下异常: -
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
the reason i know, that while iterating through a list, one cannot modify it parallely.
Run Code Online (Sandbox Code Playgroud)
但是,当我使用正常的循环,然后它正常工作,我错过了什么?
请帮忙!!!..
如果修改List,则会使从中创建的任何Iterator对象无效.高级循环(1)编译为与迭代器循环(2)几乎相同的代码,这意味着在幕后创建了一个Iterator对象.
ConcurrentMOdificationException的javadoc 有更多详细信息.
如果要在迭代时添加,请使用
ListIterator listIter = ...
while(listIter.hasNext())
{
if(shouldAdd(iter.next())) {
iter.add(....)
}
}
Run Code Online (Sandbox Code Playgroud)