并发修改异常
需求
现在有一个集合,集合中有些字符串的元素,我想判断一下里面有没有"bigdata"这个字符串 如果有,我们就添加一个"yes"
ConcurrentModificationException:并发修改异常 当不允许这样的修改时,可以通过检测到对象的并发修改的方法来抛出此异常。
原因
迭代器是依赖于集合存在的,在遍历迭代器元素的时候,当我们判断成功后,,往集合 中添加了一个元素,但是呢,迭代器这个时候并不知道已经添加了元素,所以就报错了。
简单描述为:在迭代器遍历的时候,不能通过集合去修改元素。
解决办法
1、迭代器遍历,迭代器修改
2、集合遍历,集合修改
public class ListQuestion {
public static void main(String[] args) {
//创建一个集合对象
List list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
list.add("bigdata");
list.add("hadoop");
//获取迭代器对象
// Iterator iterator = list.iterator();
// while (iterator.hasNext()){
// String s = (String) iterator.next();
// if("bigdata".equals(s)){
// list.add("yes");
// }
// }
//迭代器遍历,迭代器修改
//因为iterator没有add方法,但是list特有的集合ListIterator里面有add方法
// ListIterator listIterator = list.listIterator();//因为iterator没有add方法,但是list特有的集合ListIterator还有特有的
// while (listIterator.hasNext()){
// String s = (String) listIterator.next();
// if("bigdata".equals(s)){
// listIterator.add("yes"); //在迭代器元素"bigdata"后面添加
// }
// }
//集合遍历,集合修改
for(int i=0;i<list.size();i++){
String s = (String) list.get(i);
if("bigdata".equals(s)){
list.add("yes"); //在集合尾部添加
}
}
System.out.println(list);
}
}