您的位置:首页 > 编程语言 > Java开发

遍历容器时出现的java.util.ConcurrentModificationException

2010-04-04 21:40 411 查看
今天看别人的一段程序,原来都没有想到会有问题,一运行就报java.util.ConcurrentModificationException的错,下面是程序

ArrayList<Integer> a = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
a.add(i);
}
for (Integer o : a) {
if (o == 1) {
a.add(0);
}
}


看错误的名字貌似是并发修改的原因,上网查了一下,好像明白了一些,还是基础不行啊。我的理解是for (Integer o : a)这种循环方式使用了类似迭代器的机制,在循环的过程中一旦修改了List,造成了迭代器失效,便出现了上面的错误。

这种情况我的解决方式是不通过这种循环方式,而是采用比较傻的方式,也许某些容器效率会降低,但是可以运行,不会报错

ArrayList<Integer> a = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
a.add(i);
}
for (int i = 0; i < a.size(); i++) {
if (a.get(i) == 1) {
a.add(0);
}
}


但是如果容器不会被修改的情况还是推荐用迭代器,效率会比较高一点,欢迎高手拍砖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐