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实现) 注:这是本人参考的,各位网友只能动手试试咯