前回の「リストから合計・平均・最大・最小を計算する」サンプルをさらに発展させて、ソート(昇順・降順)や重複削除 を行うプログラムを紹介します。
サンプルコード:ソートと重複削除
import java.util.*;
public class ListSortUniqueSample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
System.out.println("整数をスペース区切りで入力してください(例: 10 20 30 20 10):");
String line = sc.nextLine();
// 入力を分割してリストに追加
String[] parts = line.split("\\s+");
for (String p : parts) {
try {
int n = Integer.parseInt(p);
numbers.add(n);
} catch (NumberFormatException e) {
System.out.println("数値に変換できません: " + p);
}
}
if (numbers.isEmpty()) {
System.out.println("有効な数値が入力されませんでした。");
return;
}
// 昇順ソート
List<Integer> ascList = new ArrayList<>(numbers);
Collections.sort(ascList);
// 降順ソート
List<Integer> descList = new ArrayList<>(numbers);
descList.sort(Collections.reverseOrder());
// 重複削除(Setを利用)
Set<Integer> uniqueSet = new LinkedHashSet<>(numbers); // 入力順を保持
List<Integer> uniqueList = new ArrayList<>(uniqueSet);
// 結果表示
System.out.println("元のリスト: " + numbers);
System.out.println("昇順ソート: " + ascList);
System.out.println("降順ソート: " + descList);
System.out.println("重複削除: " + uniqueList);
}
}
Java✅ 実行例
整数をスペース区切りで入力してください(例: 10 20 30 20 10):
30 10 20 10 40 20
元のリスト: [30, 10, 20, 10, 40, 20]
昇順ソート: [10, 10, 20, 20, 30, 40]
降順ソート: [40, 30, 20, 20, 10, 10]
重複削除: [30, 10, 20, 40]
ポイント
- Collections.sort(list) → 昇順ソート
- list.sort(Collections.reverseOrder()) → 降順ソート
- Set(特に LinkedHashSet) を使うと重複削除が簡単
HashSetは順序が保証されないLinkedHashSetは入力順を保持TreeSetは自動で昇順ソートされる
まとめ
- ソートは
Collections.sortとreverseOrderで簡単にできる - 重複削除は
Setを使うのが定番 LinkedHashSetを使えば「入力順を保ったまま重複削除」が可能
👉 ここまでで「入力 → List に格納 → 集計 → ソート・重複削除」まで一通りの流れが完成しました。

