[Java基础]集合的删除操作

在 Java 中,直接在遍历集合时删除元素会引发 ConcurrentModificationException,因为集合的结构在迭代过程中发生了变化。为了避免这种问题,可以使用 IteratorListIterator 来进行安全删除。下面介绍几种常见的方式。

1. 使用 Iterator 进行删除#

使用 Iterator 是在遍历集合时删除元素的推荐方法。Iterator 提供了 remove() 方法,可以安全地删除当前遍历到的元素。

示例:#

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

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            if (fruit.equals("banana")) {
                iterator.remove();  // 使用迭代器的 remove 方法删除元素
            }
        }

        System.out.println(list);  // 输出: [apple, orange]
    }
}

在这个例子中,iterator.remove() 方法用于安全地删除当前元素 banana

2. 使用 ListIterator (仅限于 List 集合)#

ListIteratorIterator 的增强版本,适用于 List 集合。除了 remove(),它还支持 add()set() 等操作,可以向前和向后遍历集合。

示例:#

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");

        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String fruit = listIterator.next();
            if (fruit.equals("banana")) {
                listIterator.remove();  // 使用 ListIterator 的 remove 方法删除元素
            }
        }

        System.out.println(list);  // 输出: [apple, orange]
    }
}

3. 使用 removeIf() 方法(Java 8+)#

在 Java 8 及以上版本中,可以使用 removeIf() 方法结合 Lambda 表达式,简洁地删除符合条件的元素。

示例:#

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

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");

        // 删除等于 "banana" 的元素
        list.removeIf(fruit -> fruit.equals("banana"));

        System.out.println(list);  // 输出: [apple, orange]
    }
}

removeIf() 方法会根据提供的条件判断是否删除元素,这种方法相对简单明了,适合在条件筛选的场景下使用。


总结:#

  • Iteratorremove() 方法:适用于所有集合类型。
  • ListIteratorremove() 方法:适用于 List 类型的集合,可以双向遍历。
  • removeIf() 方法:Java 8 引入,适用于更简洁的条件删除操作。

这几种方式能够有效避免遍历时直接修改集合结构导致的 ConcurrentModificationException

作者:Esofar

出处:https://www.cnblogs.com/DCFV/p/18419093

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Duancf  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示