并发修改异常
(ConcurrentModificationException)出现原因:
在使用迭代器遍历集合的同时,使用集合对象增加集合的元素;迭代器是依赖集合而存在的,在判断成功后,集合中新增加了元素,而迭代器却不知道就报错了。
/**
* 迭代器遍历 + 集合添加
* @param data
*/
public static void mixture(List<Integer> data) {
for(Integer number : data) {
if (number == 3) {
data.add(1000);
}
System.out.println(number);
}
System.out.println(data.size());
}
避免方式:
两种避免方式都是针对List集合,
方式一:迭代器遍历、迭代器增加
/**
* 迭代器遍历 + 迭代器增加
* @param data
*/
public static void iterate(List<Integer> data) {
ListIterator<Integer> iterator = data.listIterator();
while (iterator.hasNext()) {
Integer number = iterator.next();
System.out.println(number);
if (3 == number) {
iterator.add(10000);
}
}
System.out.println(data.size());
}
方式二:集合遍历、集合增加;
/**
* 普通 集合遍历 + 集合增加
*/
public static void list(List<Integer> data) {
for (int i = 0; i < data.size(); i++) {
System.out.println(data.get(i));
if (3 == data.get(i)) {
data.add(10000);
}
}
System.out.println(data.size());
}
注意:不能迭代器与集合混合遍历和操作