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

在Java中复制集合但保留原始引用,意思是创建一个新集合,其中包含与原集合相同的对象引用(不是对象副本),这样对集合结构的操作互不影响,但修改集合中的元素会影响原始对象。这种复制称为浅复制(shallow copy)。
使用构造函数进行浅复制
最简单的方式是使用目标集合类的构造函数,传入原始集合:
示例:
List original = new ArrayList();
original.add(new StringBuilder(“Hello”));
original.add(new StringBuilder(“World”));
// 浅复制:新集合引用相同的对象
List copied = new ArrayList(original);
// 修改复制集合中的元素会影响原始集合中的对象
copied.get(0).append(” Java”);
System.out.println(original.get(0)); // 输出: Hello Java
说明:两个集合是独立的(添加/删除元素互不影响),但它们持有的对象是同一个实例。
使用 clone() 方法(注意集合类型)
部分集合类实现了 Cloneable 接口,例如 ArrayList 和 LinkedList,可以调用 clone():
ArrayList cloned = (ArrayList) original.clone();
注意:clone() 返回的是 Object,需要强制转换。而且该方法也只做浅复制。
使用 Collections.copy()?注意区别
Collections.copy() 不是用来创建新集合的,它要求目标集合已有足够空间,只是把元素复制进去。一般不用于此场景。
自定义集合或不可变集合的处理
如果使用 Set 或其他类型:HashSet setCopy = new HashSet(originalSet); LinkedHashSet、TreeSet 同理,构造函数接受 Collection这些方式都保持原始对象引用不变。
基本上就这些。只要用集合的构造函数传入原集合,就能实现“复制集合但保留原始引用”的效果。关键是理解这是浅复制,对象本身没被拷贝,只是集合结构分离了。
以上就是在Java中如何复制集合但保留原始引用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/204016.html
微信扫一扫
支付宝扫一扫