从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决

本文探讨了在Java中遍历ArrayList并删除元素时遇到的java.util.ConcurrentModificationException异常问题。介绍了两种有效的解决方法,并讨论了不同方法适用的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遍历一个ArrayList去查找某项是否存在,如果存在的话就从列表中删除,方法如下:

  1. for(Personp:persons){
  2. if(p.getName().equals(name))
  3. persons.remove(p);
  4. }
for(Person p : persons){ 
        if(p.getName().equals(name)) 
        persons.remove(p); 
}

结果出现java.util.ConcurrentModificationException错误,一个并发的错误,上网google了一下,有人给出的解释是如果一边遍历ArrayList一边删除当前元素会引发java.util.ConcurrentModificationException 即”要确保遍历过程顺利完成,必须保证遍历过程中不更改集合的内容(Iterator的remove()方法除外),因此,确保遍历可靠的原则是只在一个线程中使用这个集合,或者在多线程中对遍历代码进行同步。”
解决方法1:

  1. //使用java.util.Iterator
  2. for(Iteratorit=list.iterator();it.hasNext();){
  3. Integeri=(Integer)it.next();
  4. it.remove();
  5. }
//使用java.util.Iterator 
for(Iterator it = list.iterator(); it.hasNext();){  
        Integer i = (Integer)it.next(); 
        it.remove(); 
}

解决方法2:

  1. for(inti=0;i<persons.size();i++){
  2. if(persons.get(i).getName().equals(name))
  3. persons.remove(i);
  4. }
for(int i = 0; i<persons.size(); i++){ 
    if(persons.get(i).getName().equals(name)) 
        persons.remove(i); 
}

方法2不适合大型数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值