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

    链接

  • 相关阅读:
    用Python作GIS:择菜篇
    【嵌入式开发技术之串口】Linux下串口主机程序
    1033,2052 是什么意思?
    Telnet协议详解
    生活情景英语:英语国家生存英语精选
    windows下搭建iphone开发环境
    开公司的流程
    解决某物流企业二维码打印问题
    数字黑洞
    InnoSetup 打包代码 检测.netFramework
  • 原文地址:https://www.cnblogs.com/convict/p/13210740.html
Copyright © 2011-2022 走看看