我现在的状态很奇特。我有一个如下所示的列表:-
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
现在,当我进行多种类型的遍历时,例如使用高级 for、迭代器和普通 for 循环,下面是示例代码片段:-
1> 高级循环 :-
try {
for(String a : list) {
System.out.println(a);
list.add("f");
}
} catch (Exception e) {
e.printStackTrace();
}
2> 迭代器:-
try {
Iterator<String> itr = list.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
list.add("f");
}
} catch (Exception e) {
e.printStackTrace();
}
3> 正常循环 :-
for (int i=0;i<list.size();i++) {
System.out.println(list.get(i));
list.add("f");
}
现在,特殊的问题是,当使用高级 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.
但是当我使用正常的 for 循环时,它就可以正常工作,我错过了什么吗?
请帮忙!!!..
如果修改 List,则会导致从它创建的任何 Iterator 对象失效。高级循环 (1) 编译为与迭代器循环 (2) 几乎相同的代码,这意味着在幕后创建了一个 Iterator 对象。
javadoc 为并发修改异常 http://download.oracle.com/javase/1.4.2/docs/api/java/util/ConcurrentModificationException.html有更多详细信息。
如果你想在迭代时添加,请使用
ListIterator listIter = ...
while(listIter.hasNext())
{
if(shouldAdd(iter.next())) {
iter.add(....)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)