遍历一个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);
    }
相关推荐
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 106: 两个字符串的最小ASCII删除和
java·数据结构·算法·leetcode·深度优先
Alex艾力的IT数字空间2 小时前
设计既保持高性能又兼顾可移植性的跨平台数据结构
数据结构·分布式·算法·微服务·中间件·架构·动态规划
耳总是一颗苹果2 小时前
数据结构---顺序表
数据结构
未若君雅裁3 小时前
LeetCode 51 - N皇后问题 详解笔记
java·数据结构·笔记·算法·leetcode·剪枝
小王C语言3 小时前
优先算法---双指针和滑动窗口
数据结构
大袁同学6 小时前
【哈希hash】:程序的“魔法索引”,实现数据瞬移
数据结构·c++·算法·哈希算法·散列表
@卞8 小时前
ST 表相关练习题
数据结构·c++·算法
Ace_31750887769 小时前
拼多多关键字搜索接口逆向:从 WebSocket 实时推送解析到商品数据结构化重建
数据结构·websocket·网络协议
天选之女wow10 小时前
【Hard——Day4】25.K 个一组翻转链表
数据结构·算法·leetcode·链表
root_zhb10 小时前
List.contains踩坑
java·list