遍历一个list,并删除集合中元素的几种方式

一、普通for循环结合remove删除

这种方式存在缺点,就是会漏删。

当使用普通的for循环(即for (int i = 0; i < list.size(); i++))遍历List时,每次循环都会根据当前的索引i来访问列表中的特定元素。然而,在遍历过程中如果直接删除元素,会导致列表的大小发生变化,进而影响后续元素的索引。

一般会执行i--的操作,以达到避免漏删的情况。

java 复制代码
public void listRemove()
    {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) % 2 == 0) {
                list.remove(i);
                i--;
            }
        }

        System.out.println("剩余元素:" + list);
    }

二、普通for循环倒叙删除

倒叙删除主要是结合数组的特点,从尾部删除不会导致下标索引发生改变。

java 复制代码
public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        for (int i = list.size() - 1; i >= 0; i--) {
            if (list.get(i) % 2 == 0) {
                list.remove(i);
            }
        }

        System.out.println("剩余元素:" + list);
    }

三、迭代器循环

java 复制代码
 public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            Integer element = iterator.next();
            if (element % 2 == 0) {
                iterator.remove();
            }
        }

        System.out.println("剩余元素:" + list);
    }

四、使用Stream流

java 复制代码
public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        // 使用 Stream 过滤出奇数元素,重新生成一个新的列表
        List<Integer> filteredList = list.stream()
               .filter(element -> element % 2!= 0)
               .collect(Collectors.toList());

        System.out.println("剩余元素:" + filteredList);
    }

五、使用removeIf

java 复制代码
public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        // 使用 removeIf 删除偶数元素
        list.removeIf(element -> element % 2 == 0);

        System.out.println("剩余元素:" + list);
    }
相关推荐
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠2 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾2 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8212 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q3 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒3 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
世人万千丶3 天前
成语接龙小应用 - HarmonyOS ArkUI 开发实战-TextInput与List列表-PC版本
华为·list·harmonyos·鸿蒙·鸿蒙系统
WL学习笔记3 天前
单项不带头不循环链表
数据结构·链表
小糯米6013 天前
JS 数组
数据结构·算法·排序算法
未若君雅裁3 天前
Python 数据容器详解,list、tuple、str、set、dict 到底怎么选
windows·python·list