java.util.ConcurrentModificationException 异常

这个异常是我们在迭代遍历集合的时候,使用iterator 来进行遍历。遍历过程中你对迭代的对象进行了删除或者添加操作。造成了这个异常。

当然也包含for循环。

在每次遍历的时候,iterator都会去检查size 如果发生改变就抛出异常。可以看java源码。

解决办法:

1.让iterator去修改而不是你去修改。在循环中使用iterator.remove();


2.使用“ConcurrentHashMap”替换HashMap,ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作

如果我们要进行删除,一般采用

Map<String,String> map = new HashMap<String,String>();

for(Iterator it=map.keySet().iterator();it.hasNext();){

Map.Entry<String,String> entry  = (Map.Entry<String,String> )it.next();


it.remove();

}

这种迭代不支持添加。


如果真的要添加,你可以再写一个Map然后push进去,当然 删除也是同理。。或者你遍历这个,然后删除你new的。

此处fields 是有数据需要遍历的对象。

   Map<String, Map<String, Object>> result = new HashMap<String, Map<String, Object>>();
    result.putAll(fields);
    for (Iterator it = fields.entrySet().iterator(); it.hasNext();) {
      Map.Entry<String, Map<String, Object>> entry = (Entry<String, Map<String, Object>>) it.next();
      String key = entry.getKey();
      if (key.startsWith("faEmp")) {
        result.put(key.replace("faEmp:", "faEmp:o."), entry.getValue());
        result.remove(key);
      } else if (key.startsWith("faUser")) {
        result.put(key.replace("faUser:", "faUser:u."), entry.getValue());
        result.remove(key);
      } else if (key.startsWith("employee")) {
        result.put(key.replace("employee:", "employee:e."), entry.getValue());
        result.remove(key);
      }
    }
    fields.putAll(result);





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值