Java数组对象的深拷贝

ArrayList<Cell> cells = ArrayList<Cell>();
ArrayList<Cell> init_cells = new ArrayList<Cell>();
init_cells = (ArrayList<Cell>) cells.clone();
执行以下的测试代码:
System.out.println(init_cells.get(0).name);
cells.get(0).name = "aaaaaaaa";
System.out.println(init_cells.get(0).name);

对于数组对象来说,直接对数组进行复制,虽然开辟了new了空间,但是因为数组中存的对象是引用数据类型,所以复制的时候也只是复制的引用。

对象数组深拷贝失败 
解决方法: 
1.将需要深拷贝的对象实现Cloneable接口 

2.对对象数组中的每一个对象进行深拷贝。即对每一个数组中的对象进行clone

3、因为object的clone是protected的,只能对本包或者继承类暴露这个方法,所以对象类型要实现Cloneable的接口,才能重写Clone方法。

在Cell.java中实现Cloneable接口

public class Cell implements Cloneable {
    public Object clone() {
        Cell o = null;
        try {
            o = (Cell) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return o;
    }
}

然后递归对数组中的对象进行clone,并将clone的返回对象添加到新的数组中

public static void deep_clone(ArrayList<Cell> clone_cells){
    for(Cell c : cells){
            clone_cells.add((Cell) c.clone());
        }
}
deep_clone(init_cells);
System.out.println(init_cells.get(0).name);
cells.get(0).name = "aaaaaaaa";
System.out.println(init_cells.get(0).name);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值