不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
- 测试一:
List<String> list = new ArrayList<String>();
list.add("AAAAA");
list.add("BBBB");
for(String temp : list) {
if("AAAAA".equals(temp)){
list.remove(temp);
}
}
“
运行结果正常,但是把”AAAAA”.equals(temp)换成”BBBB”.equals(temp)就会出现问题了:
Exception in thread “main” java.util.ConcurrentModificationException
- 测试二:
List<String> list = new ArrayList<String>();
list.add("AAAAA");
list.add("BBBB");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String temp = it.next();
if("BBBB".equals(temp)){
it.remove();
}
}
这里判断条件”AAAAA”.equals(temp)和”BBBB”.equals(temp)都运行正常。