2012-12-06 149 views

回答

7

通過在遍歷數組列表時不添加/刪除元素。

當您在迭代時修改列表時,此代碼將拋出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"); 
} 
0

此當你添加時/刪除/在迭代時在ArrayList中插入元素。壞代碼

例子:

Iterator it = list.iterator() 
while (it.hasNext()) 
{ 
    Object o = it.next(); 
    list.remove(o); 
} 
1

如果要刪除在一個ArrayList的元素,使用迭代器。例如:

ArrayList<String> someStrings; 
// fill someStrings 
Iterator<String> it = someStrings.iterator(); 
while(it.hasNext()){ 
    String buf = it.next(); 
    // do sth here 
} 
相關問題