如果使用foreach遍历List,在遍历过程中进行删除,程序会报错,如
public static void main(String[] args){
List<String> tests = new ArrayList<String>();
tests.add("sdfd");
tests.add("fdf");
tests.add("fdf");
tests.add("fd");
for(String str : tests){
System.out.println(str);
tests.remove(str);
}
System.out.println(tests.size());
}
错误信息如下
Exception in thread "main" sdfd
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.my.basic.ten.Test.main(Test.java:29)
使用fori 遍历虽然可以删除但是不能完全删除如:
public static void main(String[] args){
List<String> tests = new ArrayList<String>();
tests.add("sdfd");
tests.add("fdf");
tests.add("fdf");
tests.add("fd");
for (int i = 0 ; i < tests.size() ; i ++ ){
System.out.println(tests.get(i));
tests.remove(tests.get(i));
}
System.out.println(tests.size());
for (int i = 0 ; i < tests.size() ; i ++ ) {
System.out.println(tests.get(i));
}
}
/**
* 程序运行结果
* sdfd
* fdf
* 2
* fdf
* fd
*/
推荐删除方法:
public static void main(String[] args){
List<String> tests = new ArrayList<String>();
tests.add("sdfd");
tests.add("fdf");
tests.add("fdf");
tests.add("fd");
for (String str : new ArrayList<String>(tests)){
System.out.println(str);
tests.remove(str);
}
System.out.println(tests.size());
for (int i = 0; i < tests.size(); i++) {
System.out.println(tests.get(i));
}
}
/**
* 显示结果
* sdfd
* fdf
* fdf
* fd
* 0
*/