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);
}
}
List集合遍歷時修改元素出現併發修改異常總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java語言編程的基本結構--筆記
qq_27656951
2018-08-27 17:53:15
Java數組
qq_27656951
2018-08-27 17:52:37
Java語言編程結構(續)
qq_27656951
2018-08-27 17:52:27
Java語言基礎
qq_27656951
2018-08-27 17:52:23
關於正則表達式的一些常用困惑
向往飞翔的小白
2018-08-26 12:33:05
java轉換流亂碼問題
蜡笔小新爱上小丸子
2018-08-26 05:05:46
throw、throws
蜡笔小新爱上小丸子
2018-08-26 05:05:46
Redis的集羣配置的基本操作和遇到的坑
Breakpopint2017
2018-08-25 18:19:53
繼承和組合
guoyongbof5
2018-08-25 13:32:18
歡迎使用CSDN-markdown編輯器
guoyongbof5
2018-08-25 13:32:18
Java Collection
a5889544a
2018-08-25 01:07:22
緩衝區與Buffer
a5889544a
2018-08-25 01:07:19
抽象類與藉口的實際應用
a5889544a
2018-08-25 01:07:17
IndexOf、LastIndexOf、Substring的用法
郭安
2018-08-24 23:00:45