读书人

java中ArrayList深拷贝有关问题

发布时间: 2012-08-25 10:06:20 作者: rapoo

java中ArrayList深拷贝问题

在今天的项目开发中,遇到了封装的问题,封装真不是一般的难呀,想的头脑都要爆掉了,汗...

下面说说我的做法历程,已经遇到的其中一个小问题:就是如何改变引用传递,总是指向同一地址的问题

?

现在要封装了一个Column的对象,里面有好多列的属性,然后定义了一个list对象,这个list对象就相当于row吧,里面放了好几个Column的对象,后来我又定义了一个List,这个list用来存放row的list,那我就写了一个方法:

?

CreateRows(List<Column> row){     List rows = new ArrayList();     //模拟取出10行数据吧     for( int i = 0;i<10;i++){          //修改row中的culumn中某个对象的属性值          row.get(0).setXXX(23);          rows.add(row);    }}
?

上面的方法得出来的结果是10行数据,但是每一行都是一样的

?

后来考虑到可能是引用传递的问题,可能是指到同一个地址了,所以数据都一样,怎么办,想到了克隆,但是list没有克隆哇,后来经过别人指点,在网上发现了这篇文章

http://hi.baidu.com/xiaozhunic/blog/item/d46141ce2494ac1493457e7a.html

后来一试还真的可以了

?

?

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; } ?

?

记得哦,list里面的对象要实现Serializable接口,可以序列化。

?

详细参考项目:HR203EIP系统-外场规划表(ZK实现) 注:这是本人参考的,各位网友只能动手试试咯

读书人网 >编程

热点推荐