使用ArrayList时如何避免ConcurrentModificationException?

San*_*ull -3 java android

在Android上ConcurrentModificationException使用时如何避免ArrayList

有人可以给出基本的经验法则来避免它吗?

Per*_*ror 7

迭代你的arraylist时不添加/删除元素.

在迭代时修改列表时,此代码将抛出ConcurrentModificationException.

List<String> al = new ArrayList<String>();
al.add("2");
for(String s: al) {
al.remove("2");
}
Run Code Online (Sandbox Code Playgroud)

此代码不会抛出ConcurrentModificationException.

 List<String> al = new Arraylist<String>();
 Iterator<String> itr = al.iterator();
 while(itr.hasNext()){
   itr.next();
   itr.remove();
 }    
Run Code Online (Sandbox Code Playgroud)

你也可以使用一些类的从java.util.concurrent的包,如java.util.concurrent.CopyOnWriteArrayList中这不会抛出ConcurrentModificationException,当你修改而迭代名单:

  CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>();
  al.add("2");
  Iterator<String> itr = al.iterator();
  while(itr.hasNext()){
  itr.next();
  al.add("3");
 }
Run Code Online (Sandbox Code Playgroud)