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

    链接

  • 相关阅读:
    TreeView控件
    俄罗斯套娃
    c#文件操作
    c# 操作excle
    vs2010启动越来越慢解决方法
    c# 操作excle[转]
    c# 命名空间别名
    C# openfiledialog的使用
    c# 获取项目根目录方法
    jquery操作复选框(checkbox)的12个小技巧总结
  • 原文地址:https://www.cnblogs.com/convict/p/13210740.html
Copyright © 2011-2022 走看看