1 import java.util.ArrayList; 2 3 public class ExceptionTest1 { 4 5 public static void main(String[] args) { 6 7 ArrayList<Integer> al = new ArrayList<Integer>(); 8 for (int i = 0; i < 10; i++) { 9 al.add(new Integer(i)); 10 } 11 12 for(Integer i:al){ 13 System.out.println(i); 14 // if(i.equals(new Integer(5))){ 15 // al.remove(i); 16 // } 17 } 18 System.out.println(al); 19 } 20 }
去掉注释符后程序为何出现异常??(理解原因)
foreach遍历其实是Iterator,hasNext,next的简写,在每次进入遍历的方法时都会进行迭代器内部修改次数检查,而你的remove方法执行时修改了modCount的值,导致和expectedModCount的值不一致而报错。
foreach语句中不要删除arraylist的元素,一定要修改的话,就用Iterator遍历,并用Iterator的remove方法删除。
数组遍历过程中不可以操作的,骚年
拿迭代器去做你的删除操作就可以了。
用iterator遍历可以remove
搜索一下fast fail,或者debug一下代码,你就会发现问题发生的具体原因的