今天遍曆一個ArrayList去尋找某項是否存在,如果存在的話就從列表中刪除,方法如下:
- for(Person p : persons){
- if(p.getName().equals(name))
- persons.remove(p);
- }
for(Person p : persons){ if(p.getName().equals(name)) persons.remove(p); }
結果出現java.util.ConcurrentModificationException錯誤,一個並發的錯誤,上網google了一下,有人給出的解釋是如果一邊遍曆ArrayList一邊刪除當前元素會引發java.util.ConcurrentModificationException 即”要確保遍曆過程順利完成,必須保證遍曆過程中不更改集合的內容(Iterator的remove()方法除外),因此,確保遍曆可靠的原則是只在一個線程中使用這個集合,或者在多線程中對遍曆代碼進行同步。”
解決方案1:
- //使用java.util.Iterator
- for(Iterator it = list.iterator(); it.hasNext();){
- Integer i = (Integer)it.next();
- it.remove();
- }
//使用java.util.Iterator for(Iterator it = list.iterator(); it.hasNext();){ Integer i = (Integer)it.next(); it.remove(); }
解決方案2:
- for(int i = 0; i<persons.size(); i++){
- if(persons.get(i).getName().equals(name))
- persons.remove(i);
- }
for(int i = 0; i<persons.size(); i++){ if(persons.get(i).getName().equals(name)) persons.remove(i); }
方法2不適合大型數組