04.并发修改异常

并发修改异常

当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常产生

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来实现向集合中添加

你可能感兴趣的:(04.并发修改异常)