zoukankan      html  css  js  c++  java
  • Java中ArrayList边遍历边修改

    用for-each 边遍历ArrayList 边修改时:

    public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("dd");
            System.out.println(list);
    
            for (String s : list) {
                if (s.equals("dd")) {
                    list.remove(s);
                }
            }
            System.out.println(list);
        }

    会报错

    可以改用如下方式:

    ① 用迭代器 iterator进行遍历删除

    public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("dd");
            System.out.println(list);
    
            Iterator<String> iterator = list.iterator();
            while (iterator.hasNext()) {
                String next = iterator.next();
                if (next.equals("dd")) {
                    iterator.remove();
                }
            }
            System.out.println(list);
    }

    ②:使用最原始的 for循环

    public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("dd");
            System.out.println(list);
            
            for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                if (s.equals("dd")) {
                    list.remove(s);
                }
            }
            System.out.println(list);
    }

    ③:采用jdk8 Collection中新增的方法removeIf (个人推荐,简洁快捷新特性)

    public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            list.add("aa");
            list.add("bb");
            list.add("cc");
            list.add("dd");
            System.out.println(list);
    
            list.removeIf(next -> next.equals("dd"));
            System.out.println(list);
    }

    具体为什么ArrayList不能用 for-each循环去边遍历边删除,有大量科普文章解释,具体不再重复阐述,只记录方法,下面引用一篇个人觉得剖析很彻底的文章

    链接

  • 相关阅读:
    mongodb.conf配置文件
    mongodb创建普通角色和普通用户
    add unique index 注意事项
    error: src refspec master does not match any
    innodb_data_file_path配置变更引发mysql重启失败
    time_zone参数配置
    主键有无检测
    gdb在线修改mysql变量
    mybatis连接数据库
    mongo登录
  • 原文地址:https://www.cnblogs.com/convict/p/13210740.html
Copyright © 2011-2022 走看看