List的深度克隆
2016-06-06 10:01
423 查看
在完成ArrayList的复制的时候,发现通过list.addAll()方法复制的List中的对象,和原来List 中的对象是同一个地址,这意味着你修改复制的list中的一个对象,那么原来list 中的对象也会跟着变化!这称为浅克隆,在很多地方浅克隆,不能实现我们需求。深度克隆,是指在复制list的时候,list 中的对象,也都是新的对象(和原list中的对象地址不同)
1.深度复制的代码(据说源自某个国外大神)
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;
} 希望能遇到此问题的朋友,能跟我分享其他靠谱的深度克隆的方法^-^
1.深度复制的代码(据说源自某个国外大神)
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;
} 希望能遇到此问题的朋友,能跟我分享其他靠谱的深度克隆的方法^-^
相关文章推荐
- python中sort与sorted区别
- Task Arrangement -- incomplete
- GoDaddy Linux主机支持机房的更换
- C#实现RSA加密和解密详解
- iOS 代码命名规范 及Android 代码命名规范(1)iOS
- Android中Button的基本用法
- ORACLE 跟踪文件详细解释
- 调试时,真机安装不了应用
- argc和argv在main函数中的应用,及unistd.h
- 使用jquery 的deferred 报错
- linux系统安装mysql
- 找出最长回文子串之Manacher算法
- 【Node.js】和node.js相关的常识
- Android AudioManager修改设备默认音量
- Java 内存分配策略
- HAL开发全流程(验证)
- 一些关于NewSql的笔记(DTCC2016)
- 处理APP字体跟随系统字体大小改变的问题
- const 关键字总结
- MongoDB GridFS