Java | 配列(Array)と ArrayList の違い

Java Java
スポンサーリンク

では、配列と ArrayList の両方に対応した 連結関数を作る応用例 を紹介します。
これにより「同じ関数でどちらの型も連結できる」ようになります。


例題

「クラスAとクラスBの出席リストをまとめる関数を作る」

1. 配列版の連結関数

public class ConcatUtil {
    // String配列を連結する関数
    public static String[] concatArrays(String[] arr1, String[] arr2) {
        String[] result = new String[arr1.length + arr2.length];
        for(int i = 0; i < arr1.length; i++) {
            result[i] = arr1[i];
        }
        for(int i = 0; i < arr2.length; i++) {
            result[arr1.length + i] = arr2[i];
        }
        return result;
    }

    public static void main(String[] args) {
        String[] classA = {"田中", "佐藤", "鈴木"};
        String[] classB = {"高橋", "伊藤"};

        String[] allClasses = concatArrays(classA, classB);

        for(String name : allClasses) {
            System.out.println(name);
        }
    }
}
Java

ポイント

  • 配列は新しい配列を作ってコピーする必要がある
  • 連結操作を関数にまとめると使いやすくなる

2. ArrayList版の連結関数

import java.util.ArrayList;

public class ConcatUtilList {
    // ArrayListを連結する関数
    public static <T> ArrayList<T> concatLists(ArrayList<T> list1, ArrayList<T> list2) {
        ArrayList<T> result = new ArrayList<>();
        result.addAll(list1);
        result.addAll(list2);
        return result;
    }

    public static void main(String[] args) {
        ArrayList<String> classA = new ArrayList<>();
        classA.add("田中");
        classA.add("佐藤");
        classA.add("鈴木");

        ArrayList<String> classB = new ArrayList<>();
        classB.add("高橋");
        classB.add("伊藤");

        ArrayList<String> allClasses = concatLists(classA, classB);

        for(String name : allClasses) {
            System.out.println(name);
        }
    }
}
Java

ポイント

  • ArrayList なら .addAll() で簡単に連結できる
  • ジェネリクス <T> を使うと どんな型でも使える関数 にできる

3. 配列と ArrayList 両対応の比較図

操作             配列 (Array)                     ArrayList
---------------- -------------------------------- ---------------
作成             String[] arr = new String[3];      ArrayList<String> list = new ArrayList<>();
連結関数         concatArrays(arr1, arr2);        concatLists(list1, list2);
コード量         多い(コピー処理必要)           少ない(addAllでOK)
サイズ変更        不可(新配列を作る)             可(自動拡張)
汎用性            型ごとに関数必要                  ジェネリクスで汎用可能

💡 初心者向けまとめ

  • 配列は固定長なので、連結のたびに新しい配列を作る必要がある
  • ArrayList は addAll で直感的に連結できる
  • 関数にまとめると再利用が簡単
  • ArrayList はジェネリクスを使うと、型に依存せずどんなリストでも使える
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました