我写了这个小方法来删除具有特定值的数组中的所有项:
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 :(得分: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));