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