使用序列化方法实现list集合的深拷贝
程序员文章站
2022-07-06 09:14:32
...
对于可序列化(实现Serializable接口)的对象,封装它的list集合可以通过以下方法实现深拷贝
扩展一下,其实只要对象实现了Serializable接口,都可以用序列化的方式实现对象的深拷贝
已有*:
Apache的commons-lang包下面的工具类SerializationUtils已经为我们实现了拷贝功能,方法的源码如下:
其接受的参数object就是Serializable类型的
我们可以直接调用其方法实现对象拷贝(例子中的Student类实现了Serializable接口)
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; }
扩展一下,其实只要对象实现了Serializable接口,都可以用序列化的方式实现对象的深拷贝
public static <T extends Serializable> T clone(T t) { T cloneObj = null; try { // 将对象写入字节流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(t); oos.close(); // 从字节流中读取 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); cloneObj = (T) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } return cloneObj; }
已有*:
Apache的commons-lang包下面的工具类SerializationUtils已经为我们实现了拷贝功能,方法的源码如下:
public static Object clone(Serializable object) { return deserialize(serialize(object)); }
其接受的参数object就是Serializable类型的
我们可以直接调用其方法实现对象拷贝(例子中的Student类实现了Serializable接口)
public static void main(String[] args) { Student student = new Student(); Student clone = (Student) org.apache.commons.lang.SerializationUtils.clone(student); System.out.println(student.toString()); System.out.println(clone.toString()); }
上一篇: bootstrap教程(二) —— 列表组listgroup
下一篇: 浅谈java深浅拷贝
推荐阅读
-
JS集合set类的实现与使用方法示例
-
用序列化实现List
实例的深复制(推荐) -
C#中序列化实现深拷贝,实现DataGridView初始化刷新的方法
-
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
-
【转载】C#中List集合使用RemoveRange方法移除指定索引开始的一段元素
-
JavaScript实现浅拷贝与深拷贝的方法分析
-
C#中List集合使用Max()方法查找到最大值的实例
-
python使用paramiko实现远程拷贝文件的方法
-
C#使用IComparer自定义List类实现排序的方法
-
【转载】C#中List集合使用LastOrDefault方法查找出最后一个符合条件的元素