Java的Clone简要
来源:互联网 发布:建军大业知乎 编辑:程序博客网 时间:2024/05/20 06:52
对于一个普通的对象来说,如果实现Cloneable接口,并重写clone方法可以实现对象的深拷贝。
但是对于List/Set等集合来说不管是用集合的clone方法还是对象的clone方法都是浅拷贝,即指针的引用,如果要实现java集合的深拷贝必须将对象实现Serializable接口后写一个深拷贝方法才行。
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.ArrayList;import java.util.List;public class test { public static void main(String[] args) { List<Human> sdf = new ArrayList<Human>(); sdf.add(new Human("sdf1", 100)); sdf.add(new Human("sdf2", 200)); List<Human> h3c = null; try { h3c = deepCopy(sdf); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Human h1 = h3c.get(0); h1.name = "h3c"; System.out.println(sdf.get(0).name + "-" + sdf.get(0).age); System.out.println(h3c.get(0).name + "-" + h3c.get(0).age); } static class Human implements Serializable { String name; int age; public Human(String n, int a) { this.name = n; this.age = a; } } //关键代码 执行序列化和反序列化 进行深度拷贝 public static <T> List<T> deepCopy(List<T> 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); @SuppressWarnings("unchecked") List<T> dest = (List<T>) in.readObject(); return dest; } }
0 0
- Java的Clone简要
- 浅谈Java的Clone
- java 的clone方法
- Java的clone机制
- java 的clone
- 关于Java的clone()
- 理解java的clone
- java里的clone
- JAVA的Clone
- Java的clone方法
- java的clone方法
- 关于Java的clone()
- java的clone用法
- Java的Clone方法
- Java 的clone
- java -- clone的学习
- Java的clone方法
- Java的clone方法
- 将最小值放到数列最前边
- cin.get()
- 各种文件的十六进制文件头
- 关于VSOnDraw找不到 ,加载文字或者String
- ls -l 命令实现
- Java的Clone简要
- 【巧妙消维DP】【HDU2059】龟兔赛跑
- POJ1502(Dijkstra)
- HomeworldSDL终于在Linux虚拟机上跑起来了
- 利用函数求阶乘
- C++内存管理与指针的使用
- zoj1002(Fire Net)
- [ACM] SDUT 2883 Hearthstone II (第二类Stiring数)
- 'Could not load NIB in bundle: 'NSBundle解决办法