遍历一个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);
    }
相关推荐
pianmian114 分钟前
python数据结构基础(7)
数据结构·算法
ChoSeitaku3 小时前
链表交集相关算法题|AB链表公共元素生成链表C|AB链表交集存放于A|连续子序列|相交链表求交点位置(C)
数据结构·考研·链表
偷心编程3 小时前
双向链表专题
数据结构
香菜大丸3 小时前
链表的归并排序
数据结构·算法·链表
jrrz08283 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
@小博的博客4 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
AaVictory.4 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
水月梦镜花5 小时前
redis:list列表命令和内部编码
数据库·redis·list
泉崎6 小时前
11.7比赛总结
数据结构·算法
你好helloworld6 小时前
滑动窗口最大值
数据结构·算法·leetcode