では、配列と ArrayList の両方を 同じ関数で受け取り、統一して連結して返す完全版 を作ります。
Java では型が違うので少し工夫が必要ですが、ジェネリクスとオーバーロードで対応可能です。
1. 完全統一版:配列 or ArrayList を連結する関数
import java.util.ArrayList;
import java.util.Arrays;
public class ConcatUtilUnified {
// ----------------------------
// 配列版
// ----------------------------
public static <T> T[] concat(T[] arr1, T[] arr2) {
T[] result = Arrays.copyOf(arr1, arr1.length + arr2.length);
for (int i = 0; i < arr2.length; i++) {
result[arr1.length + i] = arr2[i];
}
return result;
}
// ----------------------------
// ArrayList版
// ----------------------------
public static <T> ArrayList<T> concat(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) {
// 配列
String[] classA = {"田中", "佐藤", "鈴木"};
String[] classB = {"高橋", "伊藤"};
String[] allClassesArray = concat(classA, classB);
System.out.println("配列連結結果:");
for(String name : allClassesArray) System.out.println(name);
System.out.println();
// ArrayList
ArrayList<String> listA = new ArrayList<>();
listA.add("田中"); listA.add("佐藤"); listA.add("鈴木");
ArrayList<String> listB = new ArrayList<>();
listB.add("高橋"); listB.add("伊藤");
ArrayList<String> allClassesList = concat(listA, listB);
System.out.println("ArrayList連結結果:");
for(String name : allClassesList) System.out.println(name);
}
}
Java2. 実行結果イメージ
配列連結結果:
田中
佐藤
鈴木
高橋
伊藤
ArrayList連結結果:
田中
佐藤
鈴木
高橋
伊藤
3. ポイント
- オーバーロードで同じ関数名
concatを使い、引数の型で処理を分ける - 配列版は
Arrays.copyOfとループでコピー - ArrayList版は
addAll()で簡単に連結 - ジェネリクス
<T>により、文字列以外の型でも使える
💡 初心者向けまとめ
- これで 配列と ArrayList 両方に同じ感覚で連結操作 ができる
- 実務でも、データの型や構造が変わっても同じ関数名で呼び出せるので便利
