[Java基础]集合的删除操作
在 Java 中,直接在遍历集合时删除元素会引发 ConcurrentModificationException
,因为集合的结构在迭代过程中发生了变化。为了避免这种问题,可以使用 Iterator
或 ListIterator
来进行安全删除。下面介绍几种常见的方式。
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
集合)#
ListIterator
是 Iterator
的增强版本,适用于 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()
方法会根据提供的条件判断是否删除元素,这种方法相对简单明了,适合在条件筛选的场景下使用。
总结:#
Iterator
的remove()
方法:适用于所有集合类型。ListIterator
的remove()
方法:适用于List
类型的集合,可以双向遍历。removeIf()
方法:Java 8 引入,适用于更简洁的条件删除操作。
这几种方式能够有效避免遍历时直接修改集合结构导致的 ConcurrentModificationException
。
合集:
Java基础
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具