Java List循环安全删除元素

Java List循环安全删除元素的几种方式如下:

  1. 使用迭代器(Iterator):通过调用List的iterator()方法获取List的迭代器,然后使用迭代器的remove()方法删除元素。这种方式可以避免在遍历过程中修改List导致的并发修改异常(ConcurrentModificationException)。

示例代码:

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

public class SafeRemoveDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next();
            if ("B".equals(item)) {
                iterator.remove();
            }
        }

        System.out.println(list);
    }
}
  1. 使用Java 8的Stream API:通过调用List的stream()方法创建一个Stream对象,然后使用Stream的filter()和collect()方法过滤并收集需要保留的元素。这种方式也可以避免在遍历过程中修改List导致的并发修改异常。

示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class SafeRemoveDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        List<String> filteredList = list.stream()
                .filter(item -> !"B".equals(item))
                .collect(Collectors.toList());

        System.out.println(filteredList);
    }
}
  1. 使用CopyOnWriteArrayList:CopyOnWriteArrayList是一种特殊的List实现,它在进行修改操作时(如add、set等)会复制一个新的底层数组,然后在新的数组上进行修改,最后将新数组赋值给原数组。这样,在遍历过程中对CopyOnWriteArrayList进行修改操作不会导致并发修改异常。但是,CopyOnWriteArrayList的性能较差,因为它需要频繁地复制底层数组。因此,在不需要在遍历过程中修改List的情况下,建议使用其他方式。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值