java ArrayList的深拷贝与浅拷贝问题

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



Powered by RB中文网 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024