Javaでよく言われるシャローコピーとディープコピーについて
シャローコピー はshallow copyのカタカナで、浅い複製という意味です。
ディープコピー はdeep copyのカタカナで、深い複製という意味です。
List,Mapのシャドウコピーに注意 なんとなくシステムエンジニア
http://hetaresystemengineer.seesaa.net/article/190146032.html
ちなみにシャドウコピーではなくシャローコピー。
[java]
List listA = new ArrayList(16);
List listB = new ArrayList(16);
List listC = new ArrayList(16);
/** addAllを使ってディープコピー (コピー先を変更してもコピー元は値が変わらない)*/
listB.addAll(listA);
/** シャローコピー (コピー先を変更するとコピー元も値が変わる) */
listC = listA;
[/java]
listCのように”=”で設定すると同じ値を参照します。⇒シャローコピー
listBのようにaddAllを使えば独立した値を作ります。。⇒ディープコピー
(Mapの場合はputAll)
[java]
// map1を引数にmap2を作成
Map<String, String> map2 = new HashMap<String, String>(map1);
[/java]
基本的にシャローコピーするぐらいなら、自分は使いわまします。
どっちかっていうとディープコピーすることのほうが多いかな。

コメントを残す