addAll 為淺拷貝:將源集合元素的引用複製到目標集合。修改影響取決於元素類型:
// 1. 數組元素:共享引用
List
// 手動深拷貝(簡單對象)
List deepCopy = src.stream()
.map(o -> o.clone()) // 實現 Cloneable
.collect(Collectors.toList());
// 通用序列化深拷貝
public static List deepCopy(List src) {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos)) {
oos.writeObject(src);
try (ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis)) {
return (List) ois.readObject();
}
}
}
addAll(性能優)。new ArrayList<>(src) 仍是淺拷貝,需顯式深拷貝。