package com.sf._02_遍历集合;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("西施");
        list.add("王昭君");
        list.add("貂蝉");
        list.add("杨玉环");

        /**
         * 并发修改异常
         * ConcurrentModificationException
         * 当我们在使用foreach 遍历的时候如果在遍历过程中删除了元素就会出现并发修改异常
         *
         * foreach 底层使用迭代器
         * 迭代器遍历过程中做检查操作, 每次遍历的时候都会检查元素是否更改
         * expectCount 0           count  1
         * 如果发现更改了就会并发修改异常他认为是不安全的
         *
         *  使用迭代器remove  他在删除的时候会实时更新count 和expectCount 就不会有问题了
         *
         *  我去图书馆借书  我问图书馆管理员第一排都什么书
         *  第一排 4 本数
         *  西游记  十万个为什么   三国演义 红楼梦
         *  西游记  十万个为什么  三国演义 红楼梦
         *
         *
         */

//        for (String str : list) {
//            if(str.equals("王昭君")){
//                list.remove(str);
//            }
//        }
        // 遍历修改成使用迭代器遍历 , 删除王昭君
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String ele = iterator.next();
            if("王昭君".equals(ele)){
                iterator.remove();
            }
        }
        System.out.println(list);
    }
}
