Collections.replaceAll用于将List中所有等于oldVal的元素替换为newVal,要求列表可修改且元素支持equals比较;返回true表示至少替换一次,支持null值,但不支持条件替换。

Collections.replaceAll 是 Java 集合工具类中一个简单但实用的方法,用于将列表中所有等于指定旧值的元素,统一替换成新值。它只适用于 List,且要求元素支持 equals() 比较(比如 String、Integer 等常见类型)。
基本用法:替换所有匹配项
该方法签名是:
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)它会遍历整个列表,把每个 oldVal.equals(element) 为 true 的元素替换成 newVal,返回 true 表示至少替换了一处,否则返回 false。
- 原列表必须是可修改的(比如
new ArrayList<>()),不可修改列表(如Arrays.asList()返回的)会抛UnsupportedOperationException -
oldVal可以为null,此时匹配所有null元素;newVal也可以为null - 不支持按条件替换(比如“大于 10 的数替换成 0”),仅支持“值相等”语义的批量替换
实际例子:字符串和数字替换
例如,把一个字符串列表里所有 "apple" 替换成 "orange":
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Collections.replaceAll(fruits, "apple", "orange");
// fruits 变为 ["orange", "banana", "orange", "cherry"]
再比如,把整数列表中所有 0 替换为 -1:
Collections.replaceAll(nums, 0, -1);
// nums 变为 [-1, 1, -1, 2, -1]
注意事项:null 和自定义对象
如果列表含 null,想替换它们,直接传 null 作 oldVal 即可:
// 注意:list 必须可修改,这里需转成 ArrayList
ArrayList<String> modifiable = new ArrayList<>(list);
Collections.replaceAll(modifiable, null, "unknown");
对自定义对象使用时,务必确保其正确重写了 equals()(和 hashCode()),否则可能无法匹配成功。仅靠引用相等是不够的。
替代方案:需要更灵活逻辑时怎么办
如果要按条件替换(比如“偶数变 0”、“长度大于 5 的字符串变空串”),replaceAll 就不适用了。这时推荐:
- Java 8+:用
list.replaceAll(unaryOperator),支持任意逻辑 - 传统方式:用
for循环或list.set(i, newValue) - 流式处理:
list = list.stream().map(...).collect(Collectors.toList())(注意会生成新列表)

















