码迷,mamicode.com
首页 > 编程语言 > 详细

Java中ArrayList边遍历边修改

时间:2020-06-29 22:59:42      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:https   ref   rem   文章   不能   als   alt   bsp   system   

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

链接

Java中ArrayList边遍历边修改

标签:https   ref   rem   文章   不能   als   alt   bsp   system   

原文地址:https://www.cnblogs.com/convict/p/13210740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!