Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで2つのリストをマージする方法|addAll()を使ったサンプルコード解説

この記事では、Javaで2つのリスト(List)を1つにマージ(結合)する方法について解説します。リストとは、要素を順序付けて格納し、インデックスを使って順番にアクセスできるコレクションです。要素の挿入・更新・削除・検索のためのインデックスベースのメソッドが用意されており、重複した要素を保持することもできます。

入力と出力のイメージ

以下に実際の動作例を示します。

入力:

1つ目のリスト: [45, 60, 95]
2つ目のリスト: [105, 120]

期待される出力:

2つのリストをマージした結果: [45, 60, 95, 105, 120]

アルゴリズム

マージの手順は次のとおりです。

ステップ1 - 開始
ステップ2 - input_list_1、input_list_2、result_list という3つの整数型リストを宣言する
ステップ3 - 各リストに値を設定する
ステップ4 - result_list.addAll(input_list_1) で、input_list_1 の全要素を結果リストに追加する
ステップ5 - result_list.addAll(input_list_2) で、input_list_2 の全要素を結果リストに追加する
ステップ6 - result_list を表示する
ステップ7 - 終了

ポイント解説

マージに使用している addAll() メソッドは、Collection インターフェースに定義されたメソッドで、引数に渡されたコレクションのすべての要素を、呼び出し元のリストの末尾に追加します。元のリスト(input_list_1、input_list_2)には一切変更が加わらず、新しいリスト result_list だけが更新される点に注目してください。処理時間は各リストの要素数に比例し、全体で O(n + m) となります。

例1:mainメソッド内にすべての処理を記述する場合

ここでは、すべての操作を「main」メソッドの中にまとめて記述しています。

import java.util.ArrayList;
import java.util.List;
public class Demo {
    public static void main(String[] args) {
        List<Integer> input_list_1 = new ArrayList<>();
        input_list_1.add(45);
        input_list_1.add(60);
        input_list_1.add(95);
        System.out.println("最初のリスト: " + input_list_1);
        List<Integer> input_list_2 = new ArrayList<>();
        input_list_2.add(105);
        input_list_2.add(120);
        System.out.println("2番目のリスト: " + input_list_2);
        List<Integer> result_list = new ArrayList<>();
        result_list.addAll(input_list_1);
        result_list.addAll(input_list_2);
        System.out.println("\n2つのリストをマージした結果: " + result_list);
    }
}

出力

最初のリスト: [45, 60, 95]
2番目のリスト: [105, 120]

2つのリストをマージした結果: [45, 60, 95, 105, 120]

例2:オブジェクト指向スタイルでメソッドに分割する場合

ここでは、マージ処理を独立したメソッドとしてカプセル化し、オブジェクト指向プログラミングのスタイルで記述しています。処理を部品化することで、再利用性と可読性が向上します。

import java.util.ArrayList;
import java.util.List;
public class Demo {
    static void merge(List<Integer> input_list_1, List<Integer> input_list_2){
        List<Integer> result_list = new ArrayList<>();
        result_list.addAll(input_list_1);
        result_list.addAll(input_list_2);
        System.out.println("\n2つのリストをマージした結果: " + result_list);
    }
    public static void main(String[] args) {
        List<Integer> input_list_1 = new ArrayList<>();
        input_list_1.add(45);
        input_list_1.add(60);
        input_list_1.add(95);
        System.out.println("最初のリスト: " + input_list_1);
        List<Integer> input_list_2 = new ArrayList<>();
        input_list_2.add(105);
        input_list_2.add(120);
        System.out.println("2番目のリスト: " + input_list_2);
        merge(input_list_1, input_list_2);
    }
}

出力

最初のリスト: [45, 60, 95]
2番目のリスト: [105, 120]

2つのリストをマージした結果: [45, 60, 95, 105, 120]

まとめ

Javaで2つのリストをマージする最もシンプルな方法は、addAll() メソッドを組み合わせることです。mainメソッドに直接記述する方法でも、メソッドとして切り出す方法でも同じ結果が得られます。規模が大きくなるコードでは、例2のように処理をメソッド化しておくと保守性が高まります。

  1. Pythonで2つのリストの共通要素を求めるプログラム(積集合の計算方法)

    リストの共通部分(Intersection/積集合)とは、2つのリストに共通して含まれるすべての要素を取り出し、それらを別の3つ目のリストに格納する操作のことです。 List1::[1,2,3] List2::[2,3,6] List3::[2,3] 上記の例では、List1とList2の両方に存在する「2」と「3」が抽出され、List3に格納されています。 アルゴリズム ステップ1:リストを入力する。 ステップ2:まず1つ目のリストの全要素を走査し、2つ目のリストの各要素と照合する。 ステップ3:要素が一致した場合、その値を3つ目のリストに格納する。 サンプルコード # 2つのリス

  2. Javaで2つのリストを比較する方法|等価チェック・差分抽出・共通要素の取得

    JavaのListインターフェースには、2つのリストを比較して共通要素や不足要素を見つけるための便利なメソッドが用意されています。この記事では、等価性のチェック、並び順を無視した比較、差分の抽出、共通要素の取得という4つのケース別に、具体的なコード例とともに解説します。 ソートされていない2つのリストの等価性を比較する 2つのリストが「同じ要素を同じインデックス位置に持つ」、つまり完全に一致しているかどうかを確認したい場合は、equals()メソッドを使用します。 import java.util.Arrays; import java.util.List; public class Com