在Android上使用ArrayList
時如何避免ConcurrentModificationException
?如何在使用ArrayList時避免ConcurrentModificationException?
有人可以給出基本的經驗法則,以避免它?
在Android上使用ArrayList
時如何避免ConcurrentModificationException
?如何在使用ArrayList時避免ConcurrentModificationException?
有人可以給出基本的經驗法則,以避免它?
通過在遍歷數組列表時不添加/刪除元素。
當您在迭代時修改列表時,此代碼將拋出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.CopyOnWriteArrayList這不會拋出ConcurrentModificationException
當你修改列表而迭代:
CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>();
al.add("2");
Iterator<String> itr = al.iterator();
while(itr.hasNext()){
itr.next();
al.add("3");
}
此當你添加時/刪除/在迭代時在ArrayList中插入元素。壞代碼
例子:
Iterator it = list.iterator()
while (it.hasNext())
{
Object o = it.next();
list.remove(o);
}
如果要刪除在一個ArrayList的元素,使用迭代器。例如:
ArrayList<String> someStrings;
// fill someStrings
Iterator<String> it = someStrings.iterator();
while(it.hasNext()){
String buf = it.next();
// do sth here
}
你說的是'ConcurrentModificationException'嗎?如果你想得到很好的幫助,你需要提供確切的問題細節。 – jlordo
你使用arraylist方法刪除? –