【java】java ArrayList的深拷贝与浅拷贝
一、前言:
ArrayList
是我们经常会用到的集合类,有时候我们为了要不改变原来的数据需要重新拷贝一个新的ArrayList
,今天在使用ArrayList
拷贝时遇到了一些问题,这里整理并记录一下。
二、准备:
首先: ArrayList
的常见的拷贝方法有很多,其中都是浅拷贝,这里介绍几种浅拷贝的方式:
- 通过构造函数方法拷贝:
addAll()
方法
Collections.copy
方法
stream
方法
java 8 的新特性
另外一点
clone()
方式有些特殊,最开始我以为通过clone()
是实现深拷贝。但其实clone()也是浅拷贝,原因如下:
因为通常我们使用的类型是Interger
或者String
类型的List,Interger和String
类型都是不可变类,那么只需要通过浅拷贝拷贝一层即可。给人的感觉是完全重新生成了一个新的ArrayList。
但是如果我们将类型改成我们自己的类型时,就会出问题。
三、测试
将类型改成对象,在试一下:
结果:
可以看出这样的List拷贝都是浅拷贝,都是拷贝的对象的引用,并没有真正的去深拷贝。大家可以试试别的方法,应该都是不行的。
四、深拷贝
那么如何实现一个深拷贝,网上的推荐是使用序列化方法可以实现深拷贝。
代码逻辑贴下:
使用:
注意点:所有需要拷贝到的对象,通通要实现Serializable
参考
https://www.cnblogs.com/liusandao/p/12345208.html
__EOF__

本文作者:彬在俊
本文链接:https://www.cnblogs.com/erlou96/p/16878247.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/erlou96/p/16878247.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?