昨天弄了一个类似List<Map<String, List<String>>>这样的list的复制,结果无论使用new ArrayList<>(srcList),还是Collections.copy(dest, src),貌似都是浅复制,改变新的List就会影响原来的,今天发现下面的方法很简单,记录下来
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.util.LinkedList;
- import java.util.List;
- class Cat implements Serializable {
- private String cat;
- public Cat(String name) {
- cat = name;
- }
- public String getCat() {
- return cat;
- }
- public void setCat(String cat) {
- this.cat = cat;
- }
- }
- public class CopyList {
- public static void main(String[] args) throws IOException,
- ClassNotFoundException {
- LinkedList<Cat> list = new LinkedList<Cat>();
- list.add(new Cat("a"));
- list.add(new Cat("b"));
- // 用原有集合创建新集合
- List<Cat> listCopy = (List<Cat>) deepcopy(list);
- // Collections.copy(listCopy, list);
- listCopy.add(new Cat("c"));
- for (Cat s : listCopy) {
- System.out.println("listCopy:" + s + "--cat:" + s.getCat());
- }
- for (Cat s : list) {
- System.out.println("list:" + s + "--cat:" + s.getCat());
- }
- System.out.println("listCopy:" + listCopy);
- System.out.println("list:" + list);
- }
- public static List deepcopy(List src) throws IOException,
- ClassNotFoundException {
- ByteArrayOutputStream byteout = new ByteArrayOutputStream();
- ObjectOutputStream out = new ObjectOutputStream(byteout);
- out.writeObject(src);
- ByteArrayInputStream bytein = new ByteArrayInputStream(byteout
- .toByteArray());
- ObjectInputStream in = new ObjectInputStream(bytein);
- List dest = (List) in.readObject();
- return dest;
- }
- }
相关推荐
NULL 博文链接:https://bijian1013.iteye.com/blog/2358367
List的深度复制 浅谈C#中List<T>对象的深度拷贝问题
一、List对象中的T是值类型的情况(int 类型等)...1、对于引用类型的List无法用以上方法进行复制,只会复制List中对象的引用,可以用以下扩展方法复制: static class Extensions { public static IList<T> Clone(t
android 浅复制和深复制-Java Generic Deep Copy 篇
下面小编就为大家带来一篇浅谈C#中List对象的深度拷贝问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
因为SUN的Stack不是严格意义上的stack,因此需要重写下,是这样的
如果 List<T> 里的 T 是引用类型(如myClass类),则在 像这种写法: List<myClass> lists1 = new List() { new myClass(), new myClass() }; List<myClass> lists2 = new List(lists1 ); 其实是一个浅复制的...
主要介绍了Python中list的复制及深拷贝与浅拷贝及区别解析 ,需要的朋友可以参考下
U10316013_HW5_15_10 重写 MyStack 类以执行列表字段的深拷贝
U10316025_HW4_11_10 重写 Mystack 类以逆序打印字符串
2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 ...
2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 ...
matlab简单图像处理代码深度学习排名失败 代码正在接受法律检查。 如果您只希望将其用于学术用途,请随时给我发送电子邮件。 这项工作正在扩展到TPAMI提交,其主要目标是进一步改进这项工作。 更新的代码将被发布。 ...
1.深度复制源对象。 SomeType obj1 = new SomeType (); SomeType obj2 = Copier . Copy ( obj1 ); List < SomeType> list1 = new List < SomeType>{ obj1 }; List < SomeType> list2 = Copier . Copy ( list1 ); 2....
1.2深度遍历 从栈的顶部取出一个原路径去判断,同时用同样的方式取出目标路径(栈和队列都类似于list,都可以用list实现) 广度遍历 从队列的前面取出一个原路径去判断,同时用同样的方式取出目标路径 2.判断原子级路径...
beancopy ###java bean深度克隆的简单实现 Bean中必须有对应的getter, setter方法. 可以复制包含 "8种基本类型, String, java.util.Date, enum, Set, List 以及多层嵌套" 的Bean.
Kotlin深度复制助手 动机 通常,在Kotlin中,我们会尽可能使用不可变的属性和集合。 但是,对于测试方案,我们通常希望对正常测试用例中的数据进行突变,破坏或以某种特定方式进行修改。 Kotlin数据类上的标准.copy...
1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中...
2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 ...
如下示例: 复制代码 代码如下: function rt() { static $i; echo $i++, ‘ ’; rt(); } rt(); die(); 在我的win7 + php5.3的环境下报错如下: Fatal error:Maximum function nesting level of