在Android上ConcurrentModificationException
使用时如何避免?ArrayList
有人可以给出基本的经验法则来避免它吗?
通过在遍历您的数组列表时不添加/删除元素。
当您在迭代时修改列表时,此代码将引发 ConcurrentModificationException。
List<String> al = new ArrayList<String>();
al.add("2");
for(String s: al) {
al.remove("2");
}
此代码不会抛出 ConcurrentModificationException。
List<String> al = new Arraylist<String>();
Iterator<String> itr = al.iterator();
while(itr.hasNext()){
itr.next();
itr.remove();
}
您还可以使用java.util.Concurrent包中的一些类,例如java.util.concurrent.CopyOnWriteArrayListConcurrentModificationException
在迭代时修改列表时不会抛出:
CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>();
al.add("2");
Iterator<String> itr = al.iterator();
while(itr.hasNext()){
itr.next();
al.add("3");
}
如果要删除 ArrayList 中的元素,请使用迭代器。例如:
ArrayList<String> someStrings;
// fill someStrings
Iterator<String> it = someStrings.iterator();
while(it.hasNext()){
String buf = it.next();
// do sth here
}
当您在 ArrayList 中迭代时添加/删除/插入元素时,就会发生这种情况。
错误代码示例:
Iterator it = list.iterator()
while (it.hasNext())
{
Object o = it.next();
list.remove(o);
}