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

Javaでリストから重複要素を削除する2つの方法|LinkedHashSetとStream APIのdistinct()

JavaのList(リスト)から重複する要素を削除したい場面は少なくありません。本記事では、代表的な2つの手法――LinkedHashSetを利用する方法と、Stream APIのdistinct()メソッドを利用する方法――を、サンプルコードと実行結果つきでわかりやすく解説します。

方法1: LinkedHashSetを使って重複を削除する

LinkedHashSetは、「重複した要素を許さない」かつ「挿入された順序を保持する」という特徴を持つコレクションです。そのため、ListをLinkedHashSetに変換するだけで、元の並び順を保ったまま重複要素を簡単に取り除くことができます。

サンプルコード

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Set;

public class Demo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("Jacob");
        list.add("Gary");
        list.add("Gary");
        list.add("Harry");
        list.add("Harry");
        list.add("Kevin");

        System.out.println("List = " + list);

        // ListをLinkedHashSetに変換して重複を除去
        Set<String> set = new LinkedHashSet<String>(list);
        System.out.println("重複削除後のリスト = " + set);
    }
}

実行結果

List = [Jacob, Gary, Gary, Harry, Harry, Kevin]
重複削除後のリスト = [Jacob, Gary, Harry, Kevin]

この方法のポイント

  • 順序が保持される: LinkedHashSetは挿入順序を維持するため、元のリストの並び順がそのまま反映されます。
  • 重複が自動的に排除される: Setインターフェースの実装クラスなので、同一の要素は1つしか格納されません。
  • コードがシンプル: コンストラクタにListを渡すだけで変換でき、初心者にも扱いやすい方法です。

方法2: Stream APIのdistinct()メソッドを使う

Java 8以降では、Stream APIのdistinct()メソッドを使うことで、よりモダンで簡潔なコードを実現できます。distinct()は各要素のequals()メソッドに基づいて重複を判定し、出現順序を保持したまま一意な要素だけを新しいListとして取得できます。

サンプルコード

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(
                Arrays.asList("Ryan", "Kevin", "Ryan", "Harry", "Mark", "Mark"));

        System.out.println("ArrayList = " + list);

        // distinct()で重複を除外し、新しいListとして収集
        List<String> list2 = list.stream()
                .distinct()
                .collect(Collectors.toList());

        System.out.println("重複削除後のArrayList = " + list2);
    }
}

実行結果

ArrayList = [Ryan, Kevin, Ryan, Harry, Mark, Mark]
重複削除後のArrayList = [Ryan, Kevin, Harry, Mark]

2つの方法の比較

項目LinkedHashSetStream API(distinct())
対応バージョンすべてのJavaバージョンJava 8以降
コードの書き方シンプルで直感的関数型スタイルで簡潔
順序の保持○(挿入順)○(出現順)
戻り値の型SetList

まとめ

JavaでListから重複要素を削除する場合、LinkedHashSetを使った変換が最も手軽で広く知られている方法です。一方、Java 8以降の環境であれば、Stream APIのdistinct()を活用することで、宣言的で読みやすいコードを書けます。どちらの方法も元のリストの順序を保ちながら重複を除去できるため、プロジェクトのJavaバージョンや好みのコーディングスタイルに合わせて使い分けるのがおすすめです。

  1. 【Python】リストから重複要素を削除する5つの方法を徹底解説

    リスト(List)はPythonにおける最も重要なデータ構造の一つであり、日常的なプログラミングからWeb開発まで、ほぼすべてのコードで利用されています。使用頻度が高い分、その操作をマスターすることへの需要も高く、各種操作に関する知識は必須といえます。 中でも「リストから重複要素を削除する」処理は、データの前処理やユニークな値の抽出など、数多くの場面で応用されるため、その実装方法を把握しておくと非常に役立ちます。 本記事では、Pythonでリストの重複を除去する代表的な5つの方法を、コード例と実行結果とともにわかりやすく解説します。 方法1:素朴な方法(forループ) 最も基本的なアプローチ

  2. JavaでArrayListから重複要素を削除する方法【SetとStream API】

    この記事では、JavaのArrayListから重複する要素を削除する方法を、具体的なコード例とともにわかりやすく解説します。代表的な2つのアプローチを紹介するので、目的や使用しているJavaのバージョンに応じて使い分けてください。 ArrayListから重複する文字列を削除する Setインターフェースには「重複した要素を保持できない」という特性があります。この特性を利用して、重複を含むArrayListを引数としてSetオブジェクトを生成すれば、手軽に重複を除去できます。 ポイントはLinkedHashSetを使うことです。通常のHashSetではなくLinkedHashSetを採用することで