读书人

从ArrayList中删除对象报java.util.Co

发布时间: 2013-03-22 09:49:50 作者: rapoo

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

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

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

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

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

解决方法2:

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

方法2不适合大型数组

读书人网 >编程

热点推荐