java.util.ConcurrentModificationException解决办法 来自百度知道

一:
这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉
解决办法是,你可以先将要删除的元素用另一个list装起来,等遍历结束再remove掉
可以这样写
List delList = new ArrayList();//用来装需要删除的元素
for(Information ia:list)
	if(ia.getId()==k){
		n++;
		delList.add(ia);
}
list.removeAll(delList);//遍历完成后执行删除
二:
ArrayList 遍历的时候做移除会有并发的错误。使用CopyOnWriteArrayList可解决这个问题。
 Collection<User> users =  new CopyOnWriteArrayList<User>(); // ArrayList<User>();使用这个会报错。
 users.add(new User("aaa","1"));
 users.add(new User("bbb","2"));
 users.add(new User("ccc","3"));
 Iterator<User> it = users.iterator();
 while(it.hasNext()){
 System.out.println("111");
 User user = it.next();
 if(user.getName().equals("aaa")){
 users.remove(user);
 }else{
System.out.println(user.toString());
 }
 }

三:
用迭代器Iterator
Iterator ite=list.iterator();
while(ite.hasNext()){
Object o=ite.next();
if(/*此处写你希望o满足的删除条件*/)
ite.remove();

四:
不防在if(){.......;}加上break;
修改如下:
if(ia.getId()==k){
n++;
list.remove(ia);
break;
}
注:前面三种方法我没试验,我在自己的代码中就是用了类似第三种的方法才会报出这样的异常。个人感觉那样并没有解决问题,只不过是把遍历搬在了迭代器中而已。第四种方法让我真正解决了问题。break; 很神奇的东西,哈哈。我猜想原因是这里break之后就不在遍历了。所以便不再报出java.util.ConcurrentModificationException
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值