Java - 如何复制在修改之前传递的集合对象?

时间:2011-12-29 17:50:12

标签: java deep-copy

我对Java及其传值概念稍微有点新意,我仍然接受它的约束。我有关于此代码的以下代码和问题。

问题:1)我当前的代码是否会进行深层复制?或者我也必须为A类做一个深层复制?

问题:2)深层复制是否会阻止我在班级传递的para1的更改?

提前感谢您的帮助。

此致 阿图。

public class A {
   private Double value;
}

public class I {
private Hashtable<Long, A> f2 = null;        

    I(I oldI){
        f2 = new Hastable<Long, A>(oldI);
    }
}

public class k {

private HashMap<Long, I > ob1 = null;


private HashMap<Long, I> ob2 = null; 

    k(Vector<I> para1){
    ob1 = new HashMap<Long, I >();
    for(int i=0; i < para1.size(); i++){
                    /* Question: 1  */
        ob1.put((long) i, new I(para1.get(i)));
    }
    }
}

3 个答案:

答案 0 :(得分:2)

1。)没有你当前的代码没有给你一份深刻的副本。如果你想要做一个深层复制,你也必须克隆复杂的内部类。

2。)是的,如果您在对象2中进行更改,则深层复制将阻止对象1的更改,即使对象2是对象1的克隆。

http://www.javaworld.com/javaworld/javatips/jw-javatip76.html

答案 1 :(得分:1)

如果目标是阻止修改,那么java.util.Collections中的一个或多个“不可修改”方法(如unmodifiableMap)可能会有所帮助。

答案 2 :(得分:0)

Google Guava有一些不可变的集合,它们是实际的副本,而不是原始的集合。

最近有一些很好的介绍进入互联网:http://marxsoftware.blogspot.com/2011/10/immutable-collections-guava-style.html