Javaでリストを2つに分割するプログラムの書き方
この記事では、リスト(List)を前半と後半の2つに分割する方法について詳しく解説します。
リストとは、要素を順番に格納し、シーケンシャルにアクセスできる順序付きコレクションです。インデックスを指定して要素を挿入・更新・削除・検索するためのメソッドを備えており、重複した要素を持つこともできます。
リスト分割のデモ
まず、入力と出力のイメージを確認しておきましょう。
入力:
入力リスト:[Java, Python, JavaScript, Shell, Scala]
期待される出力:
リストの前半: [Java, Python] リストの後半: [JavaScript, Shell, Scala]
アルゴリズム
リストを2つに分割する際の基本的な手順は以下のとおりです。
ステップ1 - 処理を開始する ステップ2 - input_list、first_list、second_list の3つのArrayListを宣言する ステップ3 - リストに値を設定する ステップ4 - .size() メソッドでリストのサイズを取得する ステップ5 - forループで input_list を走査し、インデックスが size/2 未満の要素を first_list へ、size/2 以上の要素を second_list へ .add() メソッドで追加する ステップ6 - 結果を表示する ステップ7 - 処理を終了する
例1:mainメソッドにすべての処理を記述する場合
この例では、すべての操作を main メソッド内にまとめて記述します。
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
System.out.println("必要なパッケージがインポートされました");
List<String> input_list = new ArrayList<String>();
input_list.add("Java");
input_list.add("Python");
input_list.add("JavaScript");
input_list.add("Shell");
input_list.add("Scala");
System.out.println("リストの内容: " + input_list);
List<String> first_list = new ArrayList<String>();
List<String> second_list = new ArrayList<String>();
int size = input_list.size();
System.out.println("\nリストの前半は次のとおりです:");
for (int i = 0; i < size / 2; i++)
first_list.add(input_list.get(i));
System.out.println(first_list);
System.out.println("リストの後半は次のとおりです:");
for (int i = size / 2; i < size; i++)
second_list.add(input_list.get(i));
System.out.println(second_list);
}
}出力結果
必要なパッケージがインポートされました リストの内容: [Java, Python, JavaScript, Shell, Scala] リストの前半は次のとおりです: [Java, Python] リストの後半は次のとおりです: [JavaScript, Shell, Scala]
例2:オブジェクト指向スタイルでメソッドに分割する場合
この例では、分割処理を独立したメソッドにカプセル化し、オブジェクト指向プログラミングらしい構成で実装します。
import java.util.ArrayList;
import java.util.List;
public class Demo {
static void split_list(List<String> input_list) {
List<String> first_list = new ArrayList<String>();
List<String> second_list = new ArrayList<String>();
int size = input_list.size();
System.out.println("\nリストの前半は次のとおりです:");
for (int i = 0; i < size / 2; i++)
first_list.add(input_list.get(i));
System.out.println(first_list);
System.out.println("リストの後半は次のとおりです:");
for (int i = size / 2; i < size; i++)
second_list.add(input_list.get(i));
System.out.println(second_list);
}
public static void main(String[] args) {
System.out.println("必要なパッケージがインポートされました");
List<String> input_list = new ArrayList<String>();
input_list.add("Java");
input_list.add("Python");
input_list.add("JavaScript");
input_list.add("Shell");
input_list.add("Scala");
System.out.println("リストの内容: " + input_list);
split_list(input_list);
}
}出力結果
必要なパッケージがインポートされました リストの内容: [Java, Python, JavaScript, Shell, Scala] リストの前半は次のとおりです: [Java, Python] リストの後半は次のとおりです: [JavaScript, Shell, Scala]
補足:subList() を使った簡潔な書き方
Javaでは、Listインターフェースが提供する subList(int fromIndex, int toIndex) メソッドを使えば、ループを明示的に書かずにリストの一部を取得することもできます。subList() は元のリストのビューを返すため、独立したリストとして扱いたい場合は ArrayList で包むのが一般的です。
int size = input_list.size(); List<String> first_half = new ArrayList<>(input_list.subList(0, size / 2)); List<String> second_half = new ArrayList<>(input_list.subList(size / 2, size));
まとめ
本記事では、forループと size() / 2 を組み合わせてリストを前半と後半に分割する方法を、手続き型とオブジェクト指向型の2パターンで紹介しました。要素数が奇数の場合は整数除算により切り捨てが行われるため、後半側が1つ多くなる点に注意してください。また、subList() を活用すれば、より簡潔に記述することも可能です。用途に応じて使い分けてみてください。
-
【Java】配列の偶数・奇数を2つのリストに分割する方法を解説
Javaでは、剰余演算子「%」を使って数値の偶数・奇数を判定することで、配列やリストの要素を2つの異なるリストに簡単に振り分けることができます。本記事では、ユーザーから入力された整数を偶数と奇数に分類し、それぞれ別の配列に格納して出力するプログラムの実装方法を、サンプルコードとともに詳しく解説します。 サンプルコード 以下のコードは、標準入力から整数を読み込み、偶数と奇数をそれぞれ別の配列に振り分けるプログラムです。 import java.util.Scanner; public class Demo { public static void main(String[] arg
-
2つ以上のファイルを交互に1つのファイルへマージするJavaプログラム
Javaでは、ScannerクラスとFileWriterクラスを組み合わせることで、複数のテキストファイルの内容を読み込み、1つの新しいファイルへ簡単にマージ(結合)できます。本記事では、3つのファイルから交互に1行ずつ読み取って結合する方法と、同じディレクトリ内の全ファイルを一括で結合する方法の2つのアプローチを紹介します。 前提となる入力ファイル ここでは、次の3つのテキストファイルが用意されているものとします。 output1.txt Hello how are you output2.txt Welcome to Tutorialspoint output3.txt We prov