Collections.replaceAll方法用于将列表中所有与指定旧值相等的元素替换为新值,其基于equals()比较并直接修改原列表。它适用于精确值替换场景,而List.replaceAll则用于通过函数式编程对每个元素进行转换,两者用途不同。该方法时间复杂度为O(n),性能良好,但依赖equals()实现,需注意null处理、线程安全及不可修改列表抛出异常等问题。

Java中的
Collections.replaceAll
Collections.replaceAll
List
oldVal
newVal
List
它的方法签名是这样的:
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
List
oldVal
newVal
true
oldVal
false
这个方法的内部实现,其实是遍历了整个列表,然后通过元素的
equals()
oldVal
newVal
equals()
我们来看一个简单的例子:
立即学习“Java免费学习笔记(深入)”;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ReplaceAllExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple");
fruits.add("Grape");
fruits.add("Apple");
System.out.println("原始列表: " + fruits); // 输出: [Apple, Banana, Orange, Apple, Grape, Apple]
// 将所有的"Apple"替换成"Cherry"
boolean changed = Collections.replaceAll(fruits, "Apple", "Cherry");
System.out.println("替换后列表: " + fruits); // 输出: [Cherry, Banana, Orange, Cherry, Grape, Cherry]
System.out.println("是否发生替换: " + changed); // 输出: true
// 尝试替换一个不存在的元素
boolean noChange = Collections.replaceAll(fruits, "Mango", "Kiwi");
System.out.println("尝试替换不存在元素后列表: " + fruits); // 输出: [Cherry, Banana, Orange, Cherry, Grape, Cherry]
System.out.println("是否发生替换 (Mango): " + noChange); // 输出: false
// 替换null值也是可以的
List<String> itemsWithNull = new ArrayList<>();
itemsWithNull.add("A");
itemsWithNull.add(null);
itemsWithNull.add("B");
itemsWithNull.add(null);
System.out.println("原始含null列表: " + itemsWithNull); // 输出: [A, null, B, null]
Collections.replaceAll(itemsWithNull, null, "N/A");
System.out.println("替换null后列表: " + itemsWithNull); // 输出: [A, N/A, B, N/A]
}
}这确实是一个常让人混淆的地方,尤其是在Java 8及更高版本中,
List
replaceAll
简单来说:
Collections.replaceAll
java.util.Collections
List.replaceAll
java.util.List
UnaryOperator
这两种方法的选择,完全取决于你的具体需求。
如果你只是想把列表里所有的“A”换成“B”,那么
Collections.replaceAll
但如果你的需求是,把列表里所有的字符串都变成大写,或者把所有数字都乘以2,甚至更复杂一点,根据每个元素的某个属性来决定如何转换它,那么
List.replaceAll
myList.replaceAll(s -> s.toUpperCase());
所以,我个人觉得,当你需要“精准定位并替换特定值”时,用
Collections.replaceAll
List.replaceAll
谈到性能,我们总会有些好奇,尤其是在处理大数据量时。
Collections.replaceAll
电子手机配件网站源码是一个响应式的织梦网站模板,软件兼容主流浏览器,且可以在PC端和手机端中进行浏览。模板包含安装说明,并包含测试数据。本模板基于DEDECms 5.7 UTF-8设计,需要GBK版本的请自己转换。模板安装方法:1、下载最新的织梦dedecms5.7 UTF-8版本。2、解压下载的织梦安装包,得到docs和uploads两个文件夹,请将uploads里面的所有文件和文件夹上传到你的
0
对于
ArrayList
list.set(index, newVal)
Collections.replaceAll
ArrayList
而对于
LinkedList
ListIterator
LinkedList
ArrayList
不过,这里有一个隐形的性能考量点:你列表中元素的
equals()
equals()
replaceAll
equals()
总的来说,对于绝大多数应用场景和数据规模,
Collections.replaceAll
replaceAll
尽管
Collections.replaceAll
首先,对equals()
equals()
hashCode()
Collections.replaceAll
equals()
equals()
其次,处理null
Collections.replaceAll
null
null
Collections.replaceAll(myList, null, "UNKNOWN");
再者,线程安全性。
Collections.replaceAll
ConcurrentModificationException
Collections.synchronizedList()
java.util.concurrent
CopyOnWriteArrayList
还有一个非常重要的点是,不可修改列表。如果你尝试对一个不可修改的列表(比如通过
List.of()
Collections.unmodifiableList()
Collections.replaceAll
UnsupportedOperationException
最后,就是它的返回值。
Collections.replaceAll
以上就是Java中Collections.replaceAll方法的应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号