遍历lis的时候对list中的对象进行移除报ConcurrentModificationException异常的解决

今天在操作Arraylist的时候需要对其中的一个对象进行删除,然后我就foreach进行遍历,然后得到这个实体,通过list.remove()进行删除,但是测试的时候发现抛异常了,然后网上查找资料发现原来是是由于  调用list.remove()方法导致modCount和expectedModCount的值不一致。  所以需要解决这个有两种方式,1)在使用iterator迭代的时候使用synchronized或者Lock进行同

步; 或者通过使用使用并发容器CopyOnWriteArrayList代替ArrayList和Vector。

由于第一种虽然能达到效果,但是由于加了synchronized和lock使得程序效率下降,并且还会抛出异常,所以推荐使用CopyONWriteArrayLIist,

使用方法如下:

//首先创建两个list集合 
List<Agent> agentList2 = new ArrayList<Agent>();
 CopyOnWriteArrayList<Agent> agentList3 = new CopyOnWriteArrayList<Agent>();

//然后在这里将普通的Arraylist集合放入到CopyOnWriteArrayLIst中
    agentList3.addAll(agentList2);
//此时在遍历的时候进行移除就不会报错了
    for (Agent an : agentList3){
        if ("127.0.0.1".equals(an.getIp())){
              agentList3.remove(an);
              continue;
      }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值