黑馬程式設計師-java基礎-併發修改異常產生的原因和解決方案
阿新 • • 發佈:2019-02-16
------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo2 {
public static void main(String[] args) {
// 建立List集合物件
List list = new ArrayList();
// 新增元素
list.add("hello");
list.add("world");
list.add("java");
// 迭代器遍歷
// Iterator it = list.iterator();
// while (it.hasNext()) {
// String s = (String) it.next();
// if ("world".equals(s)) {
// list.add("javaee");
// }
// }
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器卻沒有新增功能,所以我們使用其子介面ListIterator
// ListIterator lit = list.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// 方式2:集合遍歷元素,集合修改元素(普通for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("javaee");
}
}
System.out.println("list:" + list);
}
}
* 問題?
* 我有一個集合,如下,請問,我想判斷裡面有沒有"world"這個元素,如果有,我就新增一個"javaee"元素,請寫程式碼實現。
*
* ConcurrentModificationException:當方法檢測到物件的併發修改,但不允許這種修改時,丟擲此異常。
* 產生的原因:
* 迭代器是依賴於集合而存在的,在判斷成功後,集合的中新添加了元素,而迭代器卻不知道,所以就報錯了,這個錯叫併發修改異常。
* 其實這個問題描述的是:迭代器遍歷元素的時候,通過集合是不能修改元素的。
* 如何解決呢?
* A:迭代器迭代元素,迭代器修改元素
* 元素是跟在剛才迭代的元素後面的。
* B:集合遍歷元素,集合修改元素(普通for)
* 元素在最後新增的。
package cn.itcast_04;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo2 {
public static void main(String[] args) {
// 建立List集合物件
List list = new ArrayList();
// 新增元素
list.add("hello");
list.add("world");
list.add("java");
// 迭代器遍歷
// Iterator it = list.iterator();
// while (it.hasNext()) {
// String s = (String) it.next();
// if ("world".equals(s)) {
// list.add("javaee");
// }
// }
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器卻沒有新增功能,所以我們使用其子介面ListIterator
// ListIterator lit = list.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// 方式2:集合遍歷元素,集合修改元素(普通for)
for (int x = 0; x < list.size(); x++) {
String s = (String) list.get(x);
if ("world".equals(s)) {
list.add("javaee");
}
}
System.out.println("list:" + list);
}
}