2013-11-23 107 views
-3

刪除項目我寫了這個小方法來刪除一個陣列中的所有項目具有特定值:對於迭代器陣列

public void removeNote2(String r){ 
     for(String file : notes){ 
      if(file == r){ 
       notes.remove(r); 
      } 
     } 
    } 

不知怎的,我總是得到這個錯誤:

java.util.ConcurrentModificationException 
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) 
    at java.util.ArrayList$Itr.next(ArrayList.java:831) 
    at Notebook.removeNote2(Notebook.java:63) 

什麼了我錯了?我需要改變什麼?

+0

首先'如果(文件== R)'是不好的。使用等於比較字符串的內容。第二個谷歌爲'ConcurrentModificationException'。 –

+0

您在迭代時刪除。改用Iterator.remove()。 –

回答

2

您無法迭代列表並按照您嘗試的方式從中刪除項目。它導致ConcurrentModificationException。這樣做的正確方法,是使用迭代器:

Iterator<String> iterator = notes.iterator(); 
while(iterator.hasNext()) { 
    String file = iterator.next(); 
    if (file == r) 
    iterator.remove(); 
} 

順便說一句,你可能會想比較字符串時,不==使用equals()

1

在Java 8,這樣做:

notes.removeIf(file -> file.equals(r));