LoginSignup
18
14

More than 5 years have passed since last update.

Java でコレクションをディープコピーする

Last updated at Posted at 2017-03-15

Java で配列やコレクションをコピーして、コピー先に変更を加えても、コピー元が影響を受けないコピーをディープコピーといいます。

ネットで調べると、intString を型引数にして、

ArrayList myList = new ArrayList<MyObject>( srcList );

などとするとディープコピーが作れますと、書いてありますが、実はリストに格納しているのがオブジェクトの場合、ディープコピーになりません!!

なので、単にコレクションを引数にとって new するだけではだめです。

オブジェクトのコレクションなどをディープコピーするには、

ArrayList<MyObject> myList = new ArrayList<MyObject>(srcList.size());
for (MyObject o : srcList) {
 // 以下のどちらかを実装
 o.add(new MyObject(new o)); // コピーコンストラクタ
 o.add(o.clone()); // Clonable インターフェース実装
}

のように、コピーコンストラクタをコレクションに入れるオブジェクトに用意するか、もしくはcloneメソッドの継承をしないといけないようです。
(どちらか一方のやり方でよい)

Cloneable インターフェースの実装について:
http://qiita.com/SUZUKI_Masaya/items/8da8c0038797f143f5d3

オブジェクトの Collection をディープコピーする質問:
http://stackoverflow.com/questions/715650/how-to-clone-arraylist-and-also-clone-its-contents

18
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14