码迷,mamicode.com
首页 > 其他好文 > 详细

深拷贝使用解析

时间:2020-01-07 19:59:29      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:put   img   after   统计   https   tput   tps   htm   解决方案   

一,问题分析

  在实际开发过程中,遇到过统计相关的问题,对一个实体类中的数据进行合计,或按照某一函数进行过滤或者累计,由于java引用的是地址,这样就带来操作问题。

如:

Table<Object,Object,Object> table = HashBasedTable.create();
Table table2 = table;
.......//对table进行操作,这时,table2也跟着变化

原因就在于,java 使用的是浅拷贝,拷贝的是地址

二,解决方案

这时可以使用java提供的clone函数,但实际使用过程中对象往往嵌套包装,对于其包装属性需要循环嵌套clone,为了解决这一问题,引入流对象进行clone。

代码如下:

public static Object cloneObject(Object obj) throws Exception {

        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(byteOut);
        out.writeObject(obj);

        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
        ObjectInputStream in = new ObjectInputStream(byteIn);
        return in.readObject();
    }

 

三,测试:

public static void main(String[] args) {
        Table oriTable = HashBasedTable.create();
        System.out.println("ori:"+ oriTable);
        try {
            Table cloneTable = (Table) cloneObject(oriTable);
            oriTable.put("1", "2", "3");
            System.out.println("clone:"+cloneTable);
            System.out.println("afterOp,ori:"+oriTable);
        } catch (Exception e) {
        }
    }

技术图片

 

 

这样统计数据时候就不会有隐藏的问题了,guava的table使用,参照我的另一篇博客:

guava的Table使用解析

深拷贝使用解析

标签:put   img   after   统计   https   tput   tps   htm   解决方案   

原文地址:https://www.cnblogs.com/superchong/p/12163310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!