遍历对象的list删除时报错问题。


我们对一个对象的list或者map进行删除操作时,可能会这么写

        for(Distributor distributor:distributorList){
            String distributorShort = distributor.getDistributorShort();
            if(!MyString.isNoEmpty(distributorShort)||distributorShort.toUpperCase().indexOf(queryDistributorNameShowDis)==-1){
                distributorList.remove(distributor);
            }
        }


但是执行时,会出现一个线程问题的异常 Exception in thread "main" java.util.ConcurrentModificationException ,不能这么删除

这个异常产生的原因有几个。

一是直接对集合调用删除操作而不是在枚举器上。

二是不同的线程试图对集合进行增删操作的时候。

 

解决办法就是用Iterator,就不会报这个异常了。

            Iterator<Distributor> it = distributorList.iterator();
            while(it.hasNext()){
                Distributor distributor = it.next();
                String distributorShort = distributor.getDistributorShort();
                if(!MyString.isNoEmpty(distributorShort)||distributorShort.toUpperCase().indexOf(queryDistributorNameShowDis)==-1){
                    it.remove();
                }
            }

 

转载于:https://www.cnblogs.com/jinzhiming/p/4807981.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值