List集合遍歷時修改元素出現併發修改異常總結

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
 * 
 * 
 * 
 * ConcurrentModificationException:
 *     當方法檢測到對象的併發修改,但不允許這種修改時,拋出此異常。 
 *原因:
 * 迭代器是依賴於集合而存在的,在判斷成功後,集合的中新添加了元素,而迭代器卻不知道,所以就報錯了,這個是併發修改異常。
 * 也就是說:迭代器遍歷元素的時候,通過集合是不能修改元素的。
 * 兩種解決方案
 * 1:迭代器迭代元素,迭代器修改元素
 * 元素是跟在剛纔迭代的元素後面的。
 * 2:集合遍歷元素,集合修改元素(用普通for 爲什麼不用增強for? 因爲集合中增強for的底層就是迭代器)
 * 元素在最後添加的。
 */
public class ListDemo {
public static void main(String[] args) {
// 創建List集合對象
List list = new ArrayList();
// 添加元素
list.add("中國");
list.add("美國");
list.add("日本");


// 迭代器遍歷 出現異常
// Iterator it = list.iterator();
// while (it.hasNext()) {
// String s = (String) it.next();
// if ("中國".equals(s)) {
// list.add("韓國");
// }
// }
// 方案1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器卻沒有添加功能,所以我們使用其子接口ListIterator
// ListIterator lit = list.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("中國".equals(s)) {
// lit.add("韓國");
// }
// }
// 方案2:集合遍歷元素,集合修改元素(普通for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("中國".equals(s)) {
list.add("韓國");
}
}
System.out.println("list:" + list);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章