直接用代码来说明:

public class ForEach { public static void main(String[] args) { List list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); // 第一种方法遍历集合 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } // 第二种方法遍历集合 Iterator iterator = list.iterator(); while(iterator.hasNext()){ String s = iterator.next(); // 不会出错 if(s.equals("2")) { iterator.remove(); } System.out.println(s); } // 第三种方法遍历集合(这里有坑请注意) for(String s : list){ System.out.println(s); } // 需要注意的是不能在增强for循环里面使用remove来删除元素 /*for(String s : list){ // 这里会报java.util.ConcurrentModificationException错 list.remove(s); System.out.println(s); }*/

// 这里我们可以使用反编译来查看他的反编译后的代码

// 反编译后的代码,由此可以看出增强for循环是通过迭代器模式实现的 /*String s; for (Iterator iterator = list.iterator();iterator.hasNext(); System.out.println(i)){ s = (String)iterator.next(); }*/ // 所以说Iterator在工作的时候是不允许被迭代的对象改变 // 正确的在遍历中删除元素的姿势应该是使用第二种迭代器的方式 }}总结:也就是说在使用for--each进行遍历集合的时候,无法使用remove方法来删除集合中的元素,这个要非常注意.

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。