2011-12-29 10 views
1

私はJavaとそのパス・バイ・バリュー・コンセプトに少し慣れていますが、私はまだそれに言及しています。私はこのコードに関する以下のコードと質問を持っています。Java - 変更前に渡されているコレクションオブジェクトをコピーする方法は?

質問:1)私の現在のコードはディープコピーですか?あるいはクラスAのディープコピーをしなければならないでしょうか?

質問:2)私のクラスの周りを回っている私のpara1への変更を深刻なコピーで防ぐことはできますか?

ご協力いただきありがとうございます。

よろしく、 Atul。

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))); 
    } 
    } 
} 
+0

「public k」とは何ですか?それは "public class k"ですか? –

+0

申し訳ありませんが、私の悪い。それはクラスです、指摘してくれてありがとう。 –

答えて

2

1.)あなたの現在のコードで深いコピーが得られるわけではありません。また、深いコピーを作成したい場合は、複雑な内部クラスもクローンする必要があります。

2)はい、あなたはオブジェクト2で変更を行う場合、オブジェクト2は、オブジェクトのクローンであっても、対象物1からの変更を妨げる深いコピーが1

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

1

目標は多分java.util.CollectionsのunmodifiableMapのような「変更不可」のいずれかの方法が役立つだろう、変更を防ぐためである場合。

関連する問題