浅复制是创建新集合并保留原集合对象引用,修改元素会影响原对象。使用构造函数 new ArrayList(original) 或 clone() 实现,两者均不复制对象本身,仅分离集合结构,添加/删除元素互不影响,但对象共享。Collections.copy() 不适用此场景,因需目标集合预先存在且大小足够。Set 类型可用 new HashSet<>(originalSet) 等构造函数实现相同效果。所有方式均为浅复制,对象引用不变。

在Java中复制集合但保留原始引用,意思是创建一个新集合,其中包含与原集合相同的对象引用(不是对象副本),这样对集合结构的操作互不影响,但修改集合中的元素会影响原始对象。这种复制称为浅复制(shallow copy)。
使用构造函数进行浅复制
最简单的方式是使用目标集合类的构造函数,传入原始集合:
示例:
List
original.add(new StringBuilder(“Hello”));
original.add(new StringBuilder(“World”));
// 浅复制:新集合引用相同的对象
List
// 修改复制集合中的元素会影响原始集合中的对象
copied.get(0).append(” Java”);
System.out.println(original.get(0)); // 输出: Hello Java
说明:两个集合是独立的(添加/删除元素互不影响),但它们持有的对象是同一个实例。
使用 clone() 方法(注意集合类型)
部分集合类实现了 Cloneable 接口,例如 ArrayList 和 LinkedList,可以调用 clone():
ArrayList
注意:clone() 返回的是 Object,需要强制转换。而且该方法也只做浅复制。
使用 Collections.copy()?注意区别
Collections.copy() 不是用来创建新集合的,它要求目标集合已有足够空间,只是把元素复制进去。一般不用于此场景。
自定义集合或不可变集合的处理
如果使用 Set 或其他类型:
- HashSet<String> setCopy = new HashSet(originalSet);
- LinkedHashSet、TreeSet 同理,构造函数接受 Collection
这些方式都保持原始对象引用不变。
基本上就这些。只要用集合的构造函数传入原集合,就能实现“复制集合但保留原始引用”的效果。关键是理解这是浅复制,对象本身没被拷贝,只是集合结构分离了。


