美文网首页
List对象深浅复制

List对象深浅复制

作者: TerrenceLeung | 来源:发表于2017-02-17 17:12 被阅读0次
    List<Person> b = null;
    List<Person> a  = new ArrayList<Person>();
    a.add(new Person("Jack",2));
    a.add(new Person("Tom",2));

    b = (ArrayList<Person>)((ArrayList<Person>)a).clone();//浅复制
    
    b = new ArrayList<Person>(a);//浅复制
    
    b = new ArrayList();//浅复制
    b.addAll(a);

    Collections.copy(b,a);//浅复制

    System.arraycopy(a,0,b,0,a.size());//浅复制

    try{
        b = deepCopy(a);//深复制
    }catch (Exception e){
        //do something
    }

   
    System.out.println(b==a);
    System.out.println(b.equals(a));
    b.get(0).setName("Kate");
    System.out.println(a.get(0).getName());
}


public static <T extends Serializable> 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);
    List<T> dest = (List)in.readObject();
    return dest;

}

   Person类,拥有名字和年龄属性及其相关的get,set方法,详细代码略。
   以上部分为伪代码,从输出结果可以看出,如果输出是Kate则是浅复制,Jack则是深复制。因为,在浅复制的情况下,源数据被修改破坏之后,使用相同引用指向该数据的目标集合中的对应元素也就发生了相同的变化。因此,在需求要求必须深复制的情况下,要是使用上面提到的方法,请确保List<T>中的T类对象是不易被外部修改和破坏的。 
   其实,有时候浅复制也可以"当作"深复制用,关键看类是否提供了破坏数据的方法(如Person类的setter方法修改属性,而String则不能修改字符串的内容)。如果把以上Person类换成String,会有意外的"深复制"效果。

相关文章

  • List对象深浅复制

    }

  • 2020-06-12

    1.==与is: 2.list修改元组的实例: 3.任意对象的深浅复制:

  • JS中的深浅复制

    什么是深浅复制? 深复制:把要复制的对象的所引用的全部对象都复制一遍。开辟新空间。 浅复制:仅仅复制对象的引用,而...

  • 深浅复制

    深浅复制和属性为copy,strong值的变化问题 浅复制:只复制指向对象的指针,而不复制引用对象本身。对于浅复制...

  • 深拷贝和浅拷贝

    深复制和浅复制 1、概述 对象拷贝有两种方式:浅复制和深复制。 浅复制:拷贝指针 深复制:拷贝整个对象 2、深浅复...

  • 关于深浅拷贝的那些事

    前言 所谓深浅拷贝,其实都是进行复制,主要区别在于复制出来的新对象和原来的对象时候会相互影响。深浅拷贝的区分:B ...

  • Java如何复制对象(深浅)

    假如说你想复制一个简单变量。很简单: 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte...

  • 前端笔记(二) 对象的深浅拷贝,函数的防抖与节流,函数柯里化 ,

    对象的深浅拷贝 对象的深拷贝与浅拷贝的区别: 浅拷贝:仅仅复制对象的引用, 而不是对象本身。 深拷贝:把复制的对象...

  • List对象复制工具

  • 深拷贝和浅拷贝

    深复制(deepcopy)和浅复制(shadow copy) 深浅复制的区别 在面向对象语言中,一般来说浅复制是指...

网友评论

      本文标题:List对象深浅复制

      本文链接:https://www.haomeiwen.com/subject/khslwttx.html