- 浏览: 217763 次
- 性别:
- 来自: 烟台
文章分类
最新评论
-
KateAndNomi2333:
kunchong21 写道tinguo002 写道List l ...
ArrayList深拷贝的一种实现方法 -
kunchong21:
tinguo002 写道List list1 = new Ar ...
ArrayList深拷贝的一种实现方法 -
suihr:
你设置的操作系统的时区正确吗?
Tomcat5.5时区设置 -
xiao_Yao:
我用windows8 tomcat5.5无法 使用 呀
Tomcat5.5时区设置 -
hftgoodgood:
hftgoodgood 写道 ...
通用权限管理系统设计篇(三)——概要设计说明书
大家应该理解浅拷贝和深拷贝的区别:
浅拷贝:被复制对象的任何变量都含有和原来的对象相同的值,而任何的对其他对象的引用仍然指向原来的对象。对拷贝后的引用的修改,还能影响原来的对象。
深拷贝:把要复制的对象所引用的对象都复制了一遍,对现在对象的修改不会影响原有的对象。
如果大家还不理解,在网上看到一个人的比喻很有意思:
就好比一个爸爸一个儿子
浅拷贝:你克隆一下,只得到一个爸爸,这是浅
深拷贝:你克隆一下,既得到了爸爸,又得到了儿子,这是深
另外,如果你克隆的对象里面还包括其他对象,比如汽车对象里还有座位对象,那么浅的结果就是汽车被拷贝了,座位并没有,深的话,就是一起都拷贝了。
下面,给大家说一下如何实现ArrayList的深拷贝的一种实现方式:
有一个类Userinfo,需要实现Serializable接口,可以序列化。
Java代码
- package test;
- import java.io.Serializable;
- public class Userinfo implements Serializable
- {
- private int id;
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
下面是我的一个测试类:
Java代码
- package test;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.util.ArrayList;
- import java.util.List;
- public class TestMain {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- List src = new ArrayList(2);
- Userinfo ui1 = new Userinfo();
- ui1.setId(1);
- ui1.setName("aaa");
- src.add(ui1);
- Userinfo ui2 = new Userinfo();
- ui1.setId(2);
- ui1.setName("bbb");
- src.add(ui2);
- List dest = new ArrayList(2);
- TestMain test = new TestMain();
- try {
- dest = test.deepCopy(src);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println(src==dest);
- Userinfo u = (Userinfo)src.get(0);
- Userinfo uu = (Userinfo)dest.get(0);
- uu.setName("dkkdkddk");
- System.out.println(u.getName());
- System.out.println(uu.getName());
- }
- public List deepCopy(List 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 dest = (List)in.readObject();
- return dest;
- }
- }
就是把ArrayList的原来的对象进行序列化,然后通过反序列化读取出来,就可以了。
当然,记着放到集合中的元素也要能够序列化,所以必须实现Serializable接口。
在此,也欢迎大家提出其它的ArrayList深拷贝实现方法。
评论
3 楼
KateAndNomi2333
2015-06-12
kunchong21 写道
tinguo002 写道
List list1 = new ArrayList();
List list2 = new ArrayList(list1);
这样也可以达到深拷贝。
List list2 = new ArrayList(list1);
这样也可以达到深拷贝。
谢谢分享。
这样达成不了深拷贝。
2 楼
kunchong21
2012-05-11
tinguo002 写道
List list1 = new ArrayList();
List list2 = new ArrayList(list1);
这样也可以达到深拷贝。
List list2 = new ArrayList(list1);
这样也可以达到深拷贝。
谢谢分享。
1 楼
tinguo002
2010-12-16
List list1 = new ArrayList();
List list2 = new ArrayList(list1);
这样也可以达到深拷贝。
List list2 = new ArrayList(list1);
这样也可以达到深拷贝。
发表评论
-
eclipse下启动tomcat出现Setting property 'source' to 'org.eclipse.jst.jee.server: '错误的
2012-09-19 13:52 844eclipse下启动tomcat出现Setting pr ... -
java List remove 时的小问题
2011-11-16 17:33 1576From:http://hi.baidu.com/xia ... -
HP ProLiant DL380 G6 服务器 - 内存的插法详解
2011-11-15 14:05 2385HP ProLiant DL380 G6 服务器 - 内 ... -
Tomcat5.5时区设置
2011-10-21 11:00 1953项目中遇到Tomcat时间跟系统时间不一致的情况,在网上 ... -
记录tomcat控制台输出日志
2010-11-11 10:23 1639今天把用了2年的tomcat重新整了下,终于解决了日志的记录 ... -
成功配置tomcat的log4j日志系统,格式:HTML+每天以yyyy-mm-dd.log命名的日志文件
2010-11-11 10:19 6197http://www.blogjava.net/flysky1 ... -
关于img src值为空时,2次请求问题的深入调研
2010-08-25 14:19 1285http://hi.baidu.com/bdui/blog ... -
java String.getBytes()编码问题
2010-07-29 16:11 1625http://hi.baidu.com/miserce/b ... -
Java 中的位运算
2010-06-28 09:50 1015移位运算符 包括: “>> 右移 ... -
设置eclipse启动参数解决内存不足问题
2010-03-16 16:17 1928http://www.21jn.net/html/62/n-5 ... -
JAVA_高级特性(hashCode,clone,比较器,Class反射,序列化)
2010-02-03 10:06 1340http://blog.csdn.net/wjp5536509 ... -
com.mysql.jdbc.CommunicationsException: Communications link failure due to under
2010-01-16 14:08 2528com.mysql.jdbc.CommunicationsEx ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2010-01-13 16:01 916PO(persistant object) 持久对 ... -
Eclipse下插件安装
2009-11-09 14:09 890Eclipse plugin resource center ... -
Java/J2EE中文问题终极解决之道
2009-10-21 14:23 679Java/J2EE中文问题终极解 ... -
ADO封装类实现文件
2009-09-14 15:51 1234http://developer.51cto.com 2 ... -
使用Java多线程实现任务分发
2009-09-14 10:28 949使用Java多线程实现任 ... -
ExecutorService来进行线程池的方式实现多线程
2009-09-12 10:16 2134ExecutorService来进行线程池的方式实现多线程 ... -
openssl 生成pem 建立CA
2009-08-24 13:45 2219openssl 生成pem 建立CA 关 ... -
Java删除目录及目录下的所有文件
2009-08-21 15:45 2520Java删除目录及目录下的所有文件 java中删除目录事 ...
相关推荐
此方法是通过java提供的ArrayList方法对栈的实现;
浅析ArrayList内部实现 资源源于不但搜索,自由源于不但努力
主要介绍了java 中ArrayList迭代的两种实现方法的相关资料,Iterator与for语句的结合,需要的朋友可以参考下
ArrayList的实现原理,利用简单的例子深入解释java中ArrayList的实现原理
简单模拟java 中的arraylist的底层实现
ArrayList常用的方法如下: Add 添加到 ArrayList 的結尾處 Remove 從 ArrayList 中移除特定對象的第一個匹配項 RemoveAt 移除 ArrayList 的指定索引處的元素 Insert 將元素插入 ArrayList 的指定索引處 ...
note实现 1、使用arraylist实现listview 2、实现编辑,新增,删除操作 3、activity间传参实现 4、contextmenu 及 optionmenu实现 5、长按事件处理
采用双层散列实现的一个ArrayList类模板,可以支持20M以上个数的对象的列表,利用双层链表做的一个散列实现,查询、插入的执行效率非常快。
用java自己实现的arrayList,比较详细,有助于初学者理解arrayList的基本概念和基础用法
自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构
测试ArrayList和LinkedList的add方法
JSP_使用_Session_ArrayList_实现购物车程序
自己写的ArrayList,请勿喷!
ArrayList,LinkList链表接口实现 JAVA+eclipse实现
ArrayList是Java中的一种常见的数据结构,它实现了List接口,是线程不安全的动态数组。它的容量可以自动增长,因此可以方便地插入、删除和查找数据,是Java集合框架中广泛使用的一种结构。 ArrayList的优势在于灵活...
ArrayList重要的方法和属性(1)构造器 ArrayList提供了三个构造器 Count属性和Capacity属性 4、ArrayList与数组转换 Array的复杂版本 ArrayList常用方法 ArrayList同步机制 ArrayList内存节省方法 ArrayList使用...
集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试集合ArrayList测试
用oop思想实现对ArrayListCRUD,操作的是产品对象,很适合初学者研究。
源码解析jdk7.0集合:ArrayList的底层实现原理.pdf
在jni中操作arraylist对象,然后添加一个int型数据进去