2012-05-02 8 views
0

私はHashmap <integer, Arraylist<Double>>です。私はそれをコピーしたいと思います。私はhashmapのメソッドcloneを使用することを考えていました。 javadocツールを通過した後、それ は、次の言葉:ハッシュマップのコピー

clone 
Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned. 

このシャローコピー手段を何?私は元の行列の値を更新しながら値が変化しない別の行列が欲しいです。

またなぜ、

if(hm1 == hm1.clone()) 

はfalseを返しますか?

答えて

8

浅いコピーとは、マップオブジェクトのみが新規作成されますが、その値は複製されません。つまり、コピーには古いエントリへの参照が含まれます。 「深いクローン」マップにだからあなたがする必要があるでしょう:

  1. 反復古いマップ内のすべてのエントリの上に新しいハッシュマップオブジェクトを作成し、(深い)クローンにキーのを追加し、新しいマップへの値

==はマップの内容ではなくオブジェクト参照を比較します。

+0

浅いコピーでは、オリジナルとコピーが実際に同じアドレスに割り当てられていませんか?つまり、あなたが値を変更すると、もう一方も変更されますか? (for C++) – phantasmagoria

+0

@phantasmagoriaいいえ、Javaでは、同じインスタンスへのポインタが2つだけになります。 – vaughandroid

+0

@Baqueta Ok、2つのポインタが1つのインスタンスを指しています。したがって、1つを変更すると、もう1つは実際に正しく変更されますか? (あなたは「いいえ」で始まっていますが、私が考えているのと同じことを話しています) – phantasmagoria

0

マップにはキー(ケースの整数インスタンス)と値(配列リスト)があります。複製されたマップでは、すべてのキーと値が同じインスタンスになります。

など。あなたは持っています 整数k1 =新しい整数(1);Arraylist value1 =新しいArraylist();

originalMap.put(k1、value1);

clonedMapでは、唯一のキーはすべて元々k1用に作成された同じインスタンスです。値は同じです。

関連する問題