- 并发修改ConcurrentModificationException错误是开发中一个常见错误,多发生在对一个Collection边遍历边做影响size变化的操作中,当在迭代过程中,集合的大小发生了改变,就没有办法进行正常迭代了.就会报这个错误
- //http://blog.csdn.net/wchicho/article/details/51987992
ArrayList初始数据如下。
List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3);
场景1:不会有并发修改错误
int length = list.size();
for (int i = 0; i < length; i++) {
if (list.get(i).equals(2)) {
list.add(10);
}
}
场景2:会有并发修改错误
for(int temp : list) {
if(temp == 2) {
list.add(10);
}
}
场景3:会有并发修改错误
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
if(iterator.next().equals(2)) {
list.add(10);
}
}
- 解决并发修改错误的两种方法
- 使用数组标记需要增删的元素,在遍历结束后进行增删
- 使用iterator.remove(xxx),进行删除