Java で ArrayList をコピーする

Rupam Yadav 2023年10月12日
  1. ArrayList を別の ArrayList のコンストラクタに渡して別の ArrayList にコピーする
  2. addAll() 関数を使用して ArrayList を別のものにコピーする
  3. Java 8 の Stream を用いた ArrayList のコピーする
  4. clone() メソッドを用いて ArrayList を別のものにコピーする
Java で ArrayList をコピーする

この記事では、Java で ArrayList を別の ArrayList にコピーする 4つの方法を紹介します。どの例でも同じ要素を使って、異なるメソッドを使って ArrayList をコピーします。

ArrayList を別の ArrayList のコンストラクタに渡して別の ArrayList にコピーする

Java における ArrayList は、3 種類のコンストラクタを持つことができます。空のコンストラクタで ArrayList オブジェクトを作成し、初期サイズで作成する方法と、コレクションの要素を使って ArrayList を作成する方法があります。

ここでは 3つ目のタイプのコンストラクタを用いて ArrayList names1 を作成し、ランダムな名前を追加します。次に、新しい ArrayList names2 を作成して names1 の要素をコピーし、コンストラクタ new ArrayList<>(names1)names1 を渡します。

最後に、各要素を表示する forEach を用いて names2 の ArrayList 全体を出力します。

import java.util.ArrayList;

public class CopyArrayList {
  public static void main(String[] args) {
    ArrayList<String> names1 = new ArrayList<>();
    names1.add("Alan");
    names1.add("Alex");
    names1.add("Bob");
    names1.add("Bryan");
    names1.add("Cathy");
    names1.add("Drake");

    ArrayList<String> names2 = new ArrayList<>(names1);

    names2.forEach(System.out::println);
  }
}

出力:

Alan
Alex
Bob
Bryan
Cathy
Drake

addAll() 関数を使用して ArrayList を別のものにコピーする

この関数は Collection を引数にとり、既存の要素があればその要素を ArrayList の末尾に追加しあす。ArrayList は Collection を実装しており、addAll() メソッドの引数に ArrayList names1 を用いることができます。

names1 にはいくつかの要素が含まれており、新しく作成された空の ArrayList names2 にコピーされています。これは names2.addAll(names1) によって行われます。出力は names2 にコピーされた要素を示します。

import java.util.ArrayList;

public class CopyArrayList {
  public static void main(String[] args) {
    ArrayList<String> names1 = new ArrayList<>();
    names1.add("Alan");
    names1.add("Alex");
    names1.add("Bob");
    names1.add("Bryan");
    names1.add("Cathy");
    names1.add("Drake");

    ArrayList<String> names2 = new ArrayList<>();
    names2.addAll(names1);

    names2.forEach(System.out::println);
  }
}

出力:

Alan
Alex
Bob
Bryan
Cathy
Drake

Java 8 の Stream を用いた ArrayList のコピーする

この例では、Java 8 で導入された Stream API を利用します。要素を含む ArrayList を作成し、names1 を指定して stream() メソッドを呼び出し、collect() メソッドのようにストリームを収集して Collectors.toList() を用いてリストに折り畳むストリームメソッドを利用します。

このストリームはリストを返しますが、これを ArrayList にキャストする必要があります。

import java.util.ArrayList;
import java.util.stream.Collectors;

public class CopyArrayList {
  public static void main(String[] args) {
    ArrayList<String> names1 = new ArrayList<>();
    names1.add("Alan");
    names1.add("Alex");
    names1.add("Bob");
    names1.add("Bryan");
    names1.add("Cathy");
    names1.add("Drake");

    ArrayList<String> names2 = (ArrayList<String>) names1.stream().collect(Collectors.toList());

    names2.forEach(System.out::println);
  }
}

出力:

Alan
Alex
Bob
Bryan
Cathy
Drake

clone() メソッドを用いて ArrayList を別のものにコピーする

最後のメソッドはネイティブの ArrayList メソッドである clone() メソッドです。これは要素をコピーして新しいリストを返します。要素を含む ArrayList を作成し、clone() メソッドを呼び出す。最後に、返された結果を ArrayList<String> にキャストして、目的の結果を取得します。

import java.util.ArrayList;

public class CopyArrayList {
  public static void main(String[] args) {
    ArrayList<String> names1 = new ArrayList<>();
    names1.add("Alan");
    names1.add("Alex");
    names1.add("Bob");
    names1.add("Bryan");
    names1.add("Cathy");
    names1.add("Drake");

    ArrayList<String> names2 = (ArrayList<String>) names1.clone();

    names2.forEach(System.out::println);
  }
}

出力:

Alan
Alex
Bob
Bryan
Cathy
Drake
著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java ArrayList