使用迭代器遍历集合时,同时在删除集合中的数据,程序就会出现并发修改异常的错误。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class _Exception {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("12");list.add("23");list.add("31");list.add("14");list.add("54");list.add("56");list.add("17");
// System.out.println(list);
//需求:找出集合中全部带"1"的字,并从集合中删除
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
if(s.contains("1")){
// list.remove(s); 并发修改异常错误
it.remove(); //删除迭代器当前遍历到的数据,每删除一个数据后,相当于在底层做了i--
}
}
//解决方案:
//使用for循环遍历
// for (int i = 0; i < list.size(); i++) {
// String s = list.get(i);
// if(s.contains("1")){
// list.remove(s);
// i--;
// }
// }
System.out.println(list);
}
}
注意:使用增强for或者lambda也会引起异常的错误并且无法解决。