web-dev-qa-db-ja.com

Java ArrayListのディープコピーを作成する方法

可能性のある複製:
ArrayListを複製し、その内容も複製する方法

arrayListのコピーを作成しようとしています。基になるオブジェクトは、String、int、BigDecimals、Dates、DateTimeオブジェクトを含む単純なオブジェクトです。新しいArrayListに加えられた変更が古いArrayListに反映されないようにするにはどうすればよいですか?

Person morts = new Person("whateva");

List<Person> oldList = new ArrayList<Person>();
oldList.add(morts);
oldList.get(0).setName("Mortimer");

List<Person> newList = new ArrayList<Person>();
newList.addAll(oldList);

newList.get(0).setName("Rupert");

System.out.println("oldName : " + oldList.get(0).getName());
System.out.println("newName : " + newList.get(0).getName());

乾杯、P

50
Pnutz

追加する前にオブジェクトを複製します。たとえば、newList.addAll(oldList);の代わりに

for(Person p : oldList) {
    newList.add(p.clone());
}

cloneがin Personで正しくオーバーライドされると仮定します。

32
Serabe
public class Person{

    String s;
    Date d;
    ...

    public Person clone(){
        Person p = new Person();
        p.s = this.s.clone();
        p.d = this.d.clone();
        ...
        return p;
    }
}

実行中のコード:

ArrayList<Person> clone = new ArrayList<Person>();
for(Person p : originalList)
    clone.add(p.clone());
19
bdares