arraylist删除指定元素有四种方式:1. remove(object)删首个匹配项;2. removeall(collection)删所有匹配项;3. 迭代器remove()安全条件删除;4. removeif(predicate)简洁条件删除。

ArrayList 删除指定元素有多种方式,关键看你是想删第一个匹配项,还是所有匹配项,以及是否在意遍历时的并发修改异常(ConcurrentModificationException)。
直接用 remove(Object) 删除第一个匹配的元素
这是最常用、最简单的方式。ArrayList 的 remove(Object o) 方法会从头开始遍历,删除第一个等于指定对象的元素(基于 equals() 判断),并返回 true;没找到则返回 false。
注意:它不会按索引删,而是按值删;且只删一次。
List<string> list = new ArrayList(Arrays.asList("a", "b", "c", "b"));
list.remove("b"); // 删除第一个 "b"
System.out.println(list); // [a, c, b]
</string>
用 removeAll(Collection) 一次性删掉所有匹配元素
如果你想删掉所有等于某个值的元素,可以把目标值放进一个集合,再调用 removeAll():
- 适合批量删除相同值
- 内部也是遍历 + equals 判断,但自动处理全部匹配项
- 注意传入的是 Collection,不是单个对象
List<string> list = new ArrayList(Arrays.asList("a", "b", "c", "b"));
list.removeAll(Arrays.asList("b")); // 删除所有 "b"
System.out.println(list); // [a, c]
</string>
遍历时用迭代器 remove() 安全删除(推荐用于条件删除)
如果要根据条件(比如字符串长度 > 1、数值为偶数等)动态删元素,不能直接用 for 循环 + list.remove(),否则会抛 ConcurrentModificationException 或漏删。
正确做法是使用 Iterator 的 remove() 方法:
- 迭代器的 remove() 是唯一安全的“边遍历边删”方式
- 每次只能删当前元素,且必须在 next() 之后调用
List<string> list = new ArrayList(Arrays.asList("a", "bb", "c", "dd"));
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.length() > 1) {
it.remove(); // 安全删除
}
}
System.out.println(list); // [a, c]
</string></string>
用 removeIf()(Java 8+)一行代码条件删除
这是最简洁现代的方式,底层就是用迭代器实现的,语义清晰:
- 接收一个 Predicate(如
s -> s.length() > 1) - 自动遍历并删除所有满足条件的元素
- 无需手动管理迭代器
List<string> list = new ArrayList(Arrays.asList("a", "bb", "c", "dd"));
list.removeIf(s -> s.length() > 1);
System.out.println(list); // [a, c]
</string>











