ArrayList遍历的同时删除元素的方法

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * ArrayList如何在遍历的同时删除元素
 */
public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7));
        Iterator<Integer> iterator = list.iterator();
        /* 1. 可以使用迭代器遍历的同时,使用iterator.remove()删除元素不会有问题(原理和2差不多)
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            if (next % 2 == 0) {
                iterator.remove();
            }
        }
        /* 2. 可以使用索引遍历的同时,通过索引删除元素,但是要注意通过索引删除元素后,list的size和后续元素的索引会动态变化,所以索引也要跟着变化
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i)%2==0){
                list.remove(i);
                i--; // 索引要动态变化,不能一味增加
            }
        }
         */
        /* 3. 不能通过迭代器遍历元素时,使用 list.remove(next)来删除元素 (原因:https://blog.csdn.net/sukier_JE/article/details/79898892)
        while (iterator.hasNext()) {
            Integer next=iterator.next();
            if(next%2==0){
                list.remove(next); // java.util.ConcurrentModificationException
            }
        }
         */

        /* 4. 单纯通过索引删除会导致跳过一些元素
        for (int i = 0; i < list.size(); i++) {
            Integer remove = list.remove(i); // 不能单纯通过索引删除元素,因为list的元素下标是在不停变化的
        }
         */
        // 5. 使用removeIf()方法来删除
//        list.removeIf(i -> (i & 1) == 1);
        System.out.println(list);

    }
}
posted @   yyw九歌  阅读(210)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示
主题色彩