对于迭代器来删除数组中的项目

时间:2013-11-23 18:46:33

标签: java

我写了这个小方法来删除具有特定值的数组中的所有项:

   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)

我错了什么?我需要改变什么?

2 个答案:

答案 0 :(得分:2)

您无法按照您尝试的方式迭代列表并从中删除项目。它导致ConcurrentModificationException。正确的方法是使用迭代器:

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

顺便说一句,在比较字符串时,您可能希望使用equals(),而不是==

答案 1 :(得分:1)

在Java 8中,执行以下操作:

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