首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java -从嵌套循环上的单列表中删除避免并发修改异常

基础概念

在Java中,当你在遍历一个集合(如List)的同时尝试修改它,就会抛出ConcurrentModificationException异常。这是因为Java的集合框架在内部维护了一个修改计数器,当你通过迭代器以外的方式修改集合时,这个计数器与迭代器的预期不一致,从而引发异常。

相关优势

避免ConcurrentModificationException异常可以确保程序的稳定性和可靠性,避免在运行时出现不可预料的错误。

类型

这个问题主要涉及到的是Java集合框架中的List及其迭代器。

应用场景

在需要遍历并修改List的场景中,如数据清洗、过滤、转换等。

问题原因

当你在嵌套循环中遍历一个List,并尝试在内部循环中删除元素时,就会触发这个异常。

解决方法

方法一:使用迭代器

代码语言:txt
复制
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {
    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 num = iterator.next();
            if (num % 2 == 0) {
                iterator.remove();
            }
        }

        System.out.println(list); // 输出: [1, 3, 5]
    }
}

方法二:使用Java 8的Stream API

代码语言:txt
复制
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    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);

        List<Integer> filteredList = list.stream()
                .filter(num -> num % 2 != 0)
                .collect(Collectors.toList());

        System.out.println(filteredList); // 输出: [1, 3, 5]
    }
}

方法三:创建一个新的List

代码语言:txt
复制
import java.util.ArrayList;
import java.util.List;

public class Main {
    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);

        List<Integer> newList = new ArrayList<>();
        for (Integer num : list) {
            if (num % 2 != 0) {
                newList.add(num);
            }
        }

        System.out.println(newList); // 输出: [1, 3, 5]
    }
}

参考链接

通过以上方法,你可以避免在嵌套循环中修改List时引发的ConcurrentModificationException异常。选择哪种方法取决于你的具体需求和代码结构。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券