04.并发修改异常
2018-10-14 本文已影响0人
今天庹
并发修改异常
当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常产生
package com.itheima_02;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
/*
* 需求:判断集合中包含元素Java,如果有则添加元素Android
*
* Exception in thread "main" java.util.ConcurrentModificationException:并发修改异常
*
* 迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常
* 解决方案:
* 不适用迭代器(不推荐)
* 在使用迭代器进行遍历的时候使用迭代器进行修改
*/
public class IteratorDemo3 {
public static void main(String[] args) {
// method();
// 创建集合对象
// Collection c = new ArrayList();
List c = new ArrayList();
// 添加元素
c.add("hello");
c.add("world");
c.add("java");
// 我们可以通过遍历来获取集合中的每一个元素,然后进行比较即可
/*Iterator it = c.iterator();
while (it.hasNext()) {
String s = (String) it.next();
if (s.equals("java")) {
c.add("java");
}
}*/
ListIterator lit = c.listIterator();
while(lit.hasNext()) {
String s = (String)lit.next();
if(s.equals("java")) {
lit.add("android");
}
}
System.out.println(c);
}
private static void method() {
// 创建集合对象
Collection c = new ArrayList();
// 添加元素
c.add("hello");
c.add("world");
c.add("java");
// 判断集合中是否包含元素Java
if (c.contains("java")) {
c.add("android");
}
System.out.println(c);
}
}
并发修改异常解决方案:
- A:不使用迭代器遍历集合,就可以在遍历的时候使用集合的方法进行增加或删除
- B:依然使用迭代器遍历,那么就需要使用Iterator的子接口ListIterator来实现向集合中添加