登录
首页 >  文章 >  java教程

Java集合复制:浅拷贝与深拷贝全解析

时间:2025-12-24 16:33:55 269浏览 收藏

大家好,我们又见面了啊~本文《Java集合复制方法:浅拷贝与深拷贝详解》的内容中将会涉及到等等。如果你正在学习文章相关知识,欢迎关注我,以后会给大家带来更多文章相关文章,希望我们能一起进步!下面就开始本文的正式内容~

Java集合复制需区分浅拷贝与深拷贝:浅拷贝仅复制容器结构、共享元素引用,适用于不可变对象;深拷贝则新建集合及所有元素,彻底隔离,需手动实现或借助序列化。

Java集合如何复制_Java集合浅拷贝与深拷贝说明

Java集合的复制不是简单赋值就能完成的,关键要看是需要浅拷贝还是深拷贝——前者共享引用,后者真正独立。

浅拷贝:只复制容器结构,元素引用不变

浅拷贝创建新集合对象,但其中存放的仍是原集合中元素的**同一引用**。修改原集合里的可变对象(比如 ArrayList 里的某个 HashMap),副本里看到的也会变。

  • 常见方式:构造方法(new ArrayList(original))、addAll()stream().collect()
  • 适用场景:集合里全是不可变对象(如 String、Integer),或你明确希望两个集合共享内部状态
  • 注意:list1 = list2 不是拷贝,只是多了一个引用,两者完全指向同一对象

深拷贝:新集合 + 新元素,彻底隔离

深拷贝要求集合本身和它包含的每个对象都重新创建一份。Java 没有内置通用深拷贝机制,需手动实现。

  • 对基本类型/不可变对象:直接用浅拷贝即可,效果等同深拷贝
  • 对自定义对象:确保其支持克隆(实现 Cloneable 并重写 clone()),再逐个拷贝
  • 常用做法:遍历原集合,对每个元素调用 clone() 或构造新实例,再 add 进新集合
  • 替代方案:用 JSON 工具(如 Jackson、Gson)先序列化再反序列化,适合结构清晰的对象,但有性能和兼容性成本

常见集合的拷贝写法示例

ArrayList:
浅拷贝:new ArrayList(src)
深拷贝(元素为 MyObj):src.stream().map(MyObj::clone).collect(Collectors.toCollection(ArrayList::new))

HashSet / LinkedHashSet:
构造方法 new HashSet(src) 是浅拷贝;深拷贝需遍历 + 克隆每个元素

HashMap:
new HashMap(map) 浅拷贝键值对引用;若 key/value 可变,需手动重建 entry 或用深拷贝工具

基本上就这些。浅拷贝快而轻量,深拷贝安全但需额外控制。选哪种,取决于你的数据是否可变、是否允许跨集合影响。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Java集合复制:浅拷贝与深拷贝全解析》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>