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循环去边遍历边删除,有大量科普文章解释,具体不再重复阐述,只记录方法,下面引用一篇个人觉得剖析很彻底的文章

    链接

  • 相关阅读:
    ctfhub技能树—信息泄露—备份文件下载—vim缓存
    ctfhub技能树—信息泄露—备份文件下载—bak文件
    ctfhub技能树—信息泄露—备份文件下载—网站源码
    RecyclerView错误
    R.java的生成规则
    各种编译不通过xcode
    Gradle
    xcode如何运行下载的demo工程
    xcode资源管理
    IOS代码片段
  • 原文地址:https://www.cnblogs.com/convict/p/13210740.html
Copyright © 2011-2022 走看看