Collection集合的使用总结, 集合的并发修改异常问题

集合的并发修改异常

使用迭代器遍历集合时, 有同事再删除集合中的数据, 程序就会出现并发修改异常的错误.

 

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

public class yichang {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("王麻子");
        list.add("小李子");
        list.add("李狗蛋");
        list.add("张全蛋");
        list.add("小李");
        list.add("李玉刚");
        list.add("西伯利亚毒虫");
        System.out.println(list);
        //[王麻子, 小李子, 李狗蛋, 张全蛋, 小李, 李玉刚, 西伯利亚毒虫]

        //需求: 找出集合中全部带"李"的名字, 并从集合中删除
//        Iterator<String> it = list.iterator();
//        while (it.hasNext()){
//            String name = it.next();
//            if (name.contains("李")){
//                list.remove(name);
//            }
//            System.out.println(list);

//        for (int i = 0; i < list.size(); i++) {
//            String s = list.get(i);
//            if (s.contains("李")){
//                list.remove(s);
//            }
//        }
//        System.out.println(list);//[王麻子, 李狗蛋, 张全蛋, 李玉刚, 西伯利亚毒虫]
//        //没有删完, 因为当删了小李子后后面的数据索引都小1
//        //李狗蛋变成第2个元素索引为1, 但由于i++, 索引变为2,就跳过了李狗蛋, 后面的同理

        //解决办法
//        for (int i = 0; i < list.size(); i++) {
//              String s = list.get(i);
//              if (s.contains("李")){
//                  list.remove(s);
//                  i--;
//              }
//        }
//        System.out.println(list);
//        // [王麻子, 张全蛋, 西伯利亚毒虫]

        Iterator<String> it = list.iterator();
            while (it.hasNext()){
                String name = it.next();
                if (name.contains("李")){
                    it.remove();// 删除迭代器当前遍历到的数据, 每删除一个数据后, 相当于也在底层做了i--
                }
                System.out.println(list);//[王麻子, 张全蛋, 西伯利亚毒虫]
            }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值