0
ArrayListをできるだけ簡単にディープコピーする方法
はじめまして。
ArrayListをできるだけ簡単にディープコピーする方法を教えてください。
下記ソースでやりたい事は、_allListに保存しておいた値を別のArrayListにコピーして、ArrayListに詰まっているHashMapの値を上書きして使いたいのですが、上書きをした時に、_allListの値も更新されてしまいます。
_allListの値は保持したままにしたいのです。
何かよい方法はありませんでしょうか。
普通皆様はどのようにやっているのでしょうか。
教えてください。よろしくお願いします。
-------------------------------------------------------------------
【現ソース】
package test;
import java.util.ArrayList;
import java.util.HashMap;
public class testDate {
protected static ArrayList _allList = null;
public static void main(String[] args){
HashMap mapA_1 = new HashMap();
mapA_1.put("Aitem1", "A1");
mapA_1.put("Aitem2", "A2");
mapA_1.put("Aitem3", "A3");
mapA_1.put("Aitem4", "A4");
mapA_1.put("Aitem5", "A5");
HashMap mapA_2 = new HashMap();
mapA_2.put("Aitem1", "A1-2");
mapA_2.put("Aitem2", "A2-2");
mapA_2.put("Aitem3", "A3-2");
// listZにマップをセット
ArrayList listZ = new ArrayList();
listZ.add(mapA_1);
// _allListに保存
_allList = listZ;
System.out.println("_allList:"+_allList);
// listYを作成し_allListの内容をコピー
ArrayList listY = new ArrayList();
listY = _allList;
// mapA_1の中身をmapA_2で上書きする
HashMap tmpMap = (HashMap)listY.get(0);
tmpMap.putAll(mapA_2);
System.out.println("tmpMap:"+tmpMap);
System.out.println("_allList:"+_allList);
}
}
【実行結果】
_allList:[{Aitem4=A4, Aitem3=A3, Aitem2=A2, Aitem1=A1, Aitem5=A5}]
tmpMap:{Aitem4=A4, Aitem3=A3-2, Aitem2=A2-2, Aitem1=A1-2, Aitem5=A5}
_allList:[{Aitem4=A4, Aitem3=A3-2, Aitem2=A2-2, Aitem1=A1-2, Aitem5=A5}]
【こうしたい】
_allList:[{Aitem4=A4, Aitem3=A3, Aitem2=A2, Aitem1=A1, Aitem5=A5}]
tmpMap:{Aitem4=A4, Aitem3=A3-2, Aitem2=A2-2, Aitem1=A1-2, Aitem5=A5}
_allList:[{Aitem4=A4, Aitem3=A3, Aitem2=A2, Aitem1=A1, Aitem5=A5}]
↑コピー後の_allListの中身は変わらず
-------------------------------------------------------------------