Java ArrayList オブジェクトのリストをコピーする

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行目は、インスタンスを受け取り値をセットします。

関連の記事

Java for文のサンプル(break/continue/ラベル)

△上に戻る