JAVA集合遍历删除方法

 /**
  * 集合遍历删除元素的方法
  */
public class DeleteList {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> list = new ArrayList<>();
        list.add("mysql");
        list.add("redis");
        list.add("nacos");
        list.add("linux");
        list.add("windows");
        list.add("redis");
        list.add("redis");
        list.add("ubuntu");
        System.out.println(list);
        //[mysql, redis, nacos, linux, windows, redis, redis, ubuntu]
        // 需求:删除全部的redis信息。
        // 1、迭代器遍历删除
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String ele = it.next();
            if("redis".equals(ele)){
                //list.remove(ele); // 集合删除会出现bug-“java.util.ConcurrentModificationException”
                it.remove(); // 删除迭代器所在位置的元素值(方案一)
            }
        }
        System.out.println(list);
        /**
         * 2、foreach(增强for循环)遍历删除也会出问题:
         * 不能遍历的同时删除元素(“java.util.ConcurrentModificationException”)
         */

        for (String s : list) {
            if("redis".equals(s)){
                list.remove(s);
            }
        }

        // 3、lambda表达式(也会出现问题,Lambda也不能同时遍历并删除,会出现bug)
        list.forEach(s -> {
            if ("redis".equals(s)) {
                list.remove(s);
            }
        });

        // 4.1、for循环(边遍历边删除集合,但是必须从后面开始遍历删除才不漏掉应该删除的元素)(推荐一)
        for (int i = list.size() - 1; i >= 0 ; i--) {
            String str = list.get(i);
            if("redis".equals(str)){
                list.remove(str);
            }
        }

        // 4.2、for循环(边遍历边删除集合,但是必须从后面开始遍历删除才不漏掉应该删除的元素)(推荐二)
        for (int i = 0; i < list.size(); i++) {
            String str = list.get(i);
            if("redis".equals(str)){
                list.remove("redis");
                i--;
            }
        }
        System.out.println(list);
    }
}

 

posted @ 2022-06-11 15:29  Sentinel-163  阅读(340)  评论(0编辑  收藏  举报