zoukankan      html  css  js  c++  java
  • for-each的坑(Hollis)

    直接用代码来说明:

    public class ForEach {
    public static void main(String[] args) {

    List<String> 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<String> 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方法来删除集合中的元素,这个要非常注意.
  • 相关阅读:
    抚琴弹唱东流水
    借点阳光给你
    日月成双行影单
    一夜飘雪入冬来
    悼念钱学森
    我的青春谁作主
    重游望江楼有感
    雪后暖阳
    满城尽添黄金装
    敢叫岁月不冬天
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8834309.html
Copyright © 2011-2022 走看看