在Java中删除ArrayList指定元素需区分值删与索引删:按值删用remove(Object)删第一个匹配项(基于equals);按索引删用remove(int);遍历时安全删除推荐removeIf()或倒序for循环。

在 Java 中删除 ArrayList 中的指定元素,关键要看你用的是“值”还是“索引”,以及是否需要安全地遍历中删除。直接调用 remove() 方法可能出错,尤其是边遍历边删时容易跳过元素或抛 ConcurrentModificationException。
按值删除(删除第一个匹配的元素)
使用 list.remove(Object o),它会从头开始查找并删除第一个等于该对象的元素(基于 equals() 判断),返回 true 表示删除成功,false 表示未找到。
- 注意:这个方法是
ArrayList继承自AbstractList的,参数是对象,不是下标 - 如果元素是基本类型包装类(如
Integer)、String等,比较是安全的;自定义类需重写equals()和hashCode() - 示例:list.remove("apple") —— 删除第一个值为 "apple" 的字符串
按索引删除(删除指定位置的元素)
使用 list.remove(int index),它会删除并返回该索引处的元素,后续元素自动前移。
- 索引必须合法(
0 ≤ index ),否则抛 <code>IndexOutOfBoundsException - 示例:list.remove(2) —— 删除第 3 个元素(索引从 0 开始)
安全地批量删除多个匹配元素(推荐用于遍历时删除)
不能用普通 for 循环 + remove(),因为删除后索引变化会导致漏删。正确方式有:
立即学习“Java免费学习笔记(深入)”;
-
使用迭代器的
remove()方法:Iteratorit = list.iterator(); while (it.hasNext()) { if (it.next().equals("target")) it.remove(); } -
JDK 8+ 推荐用
removeIf():list.removeIf(s -> s.equals("target")) —— 简洁、安全、内部已处理并发修改 - 倒序 for 循环(仅适用于按条件删,不依赖迭代器):for (int i = list.size()-1; i >= 0; i--) { if (list.get(i).equals("target")) list.remove(i); }
删除所有匹配元素(不止第一个)
单靠 remove(Object) 只删第一个。要删全部,用上面的 removeIf() 最方便;或者手动循环调用 remove(Object) 直到返回 false(但效率低,不推荐)。
- list.removeIf(x -> x instanceof Integer && ((Integer) x) > 10) —— 删除所有大于 10 的整数
- 避免写成
while (list.remove("x")),对不存在的元素会死循环(因为remove()返回false,但没做退出判断)


















