Java ArrayListのオブジェクトのリストをコピーするサンプルです。
目次
目次 | オブジェクトのリストをコピーするサンプル |
Syain.java |
リストをコピーするサンプル
1.リストを作成しオブジェクトを追加します。
2.作成したリストから新規で作成したリストにコピーします。
package test1;
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
List<Syain> syainList1 = new ArrayList<>();
syainList1.add(new Syain("1001", "suzuki"));
syainList1.add(new Syain("1002", "tanaka"));
List<Syain> syainList2 = new ArrayList<>();
for (Syain s1 : syainList1) {
syainList2.add(new Syain(s1)); // deep copy
// syainList2.add(s1); //shallow copy
}
syainList2.get(0).setId("3001");
System.out.println(syainList1.get(0).getId()); // 1001
System.out.println(syainList2.get(0).getId()); // 3001
System.out.println(syainList1.get(1).getId()); // 1002
System.out.println(syainList2.get(1).getId()); // 1002
System.out.println(syainList1.size()); // 2
System.out.println(syainList2.size()); // 2
}
}
8行目は、1つめのリストでコピー元になります。9,10行目でインスタンスを生成しリストに追加しています。
12行目は、2つめのリストでコピー先になります。
14行目は、for文でコピー元の分繰り返します。
15行目は、リストにインスタンスを生成して追加しています。
その際コンストラクタにコピー元のインスタンスを指定しています。新しいインスタンスを生成しているのでコピー先を変更してもコピー元は変わりません。deep copyです。
16行目のようにコピー元のインスタンスをリストに追加するとコピー先を変更するとコピー元も変わってしまします。shallow copyです。
Syain.java
上記コードで使用するSyain.javaです。
package test1;
public class Syain {
private String id;
private String name;
public Syain(String id,String name) {
this.id = id;
this.name = name;
}
public Syain(Syain s1) {
this.id = s1.id;
this.name = s1.name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
7,11行目は、コンスとクタです。
11行目は、インスタンスを受け取り値をセットします。
関連の記事