ArrayList中移除数据报错

在Java中,使用for each循环移除ArrayList中的元素可能会抛出`ConcurrentModificationException`。解决这个问题的方法是通过迭代器iterator进行移除,或者使用CopyOnWriteArrayList,它在迭代时会创建副本,确保线程安全且不会报错。CopyOnWriteArrayList具有读写分离、线程安全的特性,性能优于Vector,适合作为多线程环境下修改集合的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看到了一个线程安全的list ,位于

java.util.concurrent包下面CopyOnWriteArrayList,想起来很久之前使用ArrayList踩得坑,在此记录一下:

        List<String> list = new ArrayList();
        list.add("A");
        list.add("B");
        list.add("C");

        for (String str : list) {
            if ("A".equals(str)) {
                list.remove(str);
            }
        }

项目中我们可能有时候会用上面写法移除list中数据,但是运行就会发现报错,java.util.ConcurrentModificationException,

源码发现for each执行时会走如上代码,移除之后的size不等,便会报错,

要想正确移除数据可以用下面方法迭代器iterator

        List<String> list = new ArrayList();
        list.add("A");
        list.add("B");
        list.add("C");

        Iterator var = list.iterator();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值