Java學習筆記121——併發修改異常
阿新 • • 發佈:2021-12-22
需求
現在有一個集合,集合中有些字串的元素,我想判斷一下里面有沒有"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);
}
}