java.util.ConcurrentModificationException解决办法

              这个问题发生在我前几天写代码的时候,但是我需要对ArrayList中的数据进行过滤,将一部分符合条件的实体对象从ArrayList中去除,然后再对ArrayList中的数据进行使用或其他操作。

        但是我不加思考的在循环中使用了list.remove(Object o)的方式来去除实体对象,结果爆了java.util.ConcurrentModificationException异常,参考代码如下:

for(Contact contact : list){
	if(contact.getName().equals(people)){
		list.remove(contact);
	}			
}

细想之后,觉得确实不能这么干,在循环中进行删除,那么下一次循环时候ArrayList已经变化,循环将无法进行下去,这是非常糟糕的,当时我想到的解决办法是将符合条件的实体对象contact全部放入一个新的List<Contact>,但是然后在循环结束之后使用list.removeall(newlist);的方法来排除掉符合条件的contact,此时list中的数据才是我需要的。

        后来我在浏览了一些博客之后,又有了一个新的想法来实现这个功能,代码如下:

for(Iterator it = list.iterator(); it.hasNext();){
			Contact contact = (Contact) it.next();
			if(contact.getName().equals(people)){
				it.remove();
			}
		}

通过迭代器本身的remove方法即可马上删除符合条件的contact。

        好了,这就是我对这个异常的认识和解决办法,如果大家有更好的见解和解决办法,欢迎留言,谢谢~


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值