首页 > 代码库 > Java的Clone简要
Java的Clone简要
对于一个普通的对象来说,如果实现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; } }
Java的Clone简要
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。