【3分Java入門】Listで重複するデータを取り除く方法

この記事ではListで重複するデータを取り除く方法をわかりやすく解説します!

List内の重複しているデータを削除したい
Listにデータを追加する際に重複しないようにしたい
Listから重複するデータを削除する方法はいくつもあるの?
Java8の新機能を使って簡潔に重複する要素を削除したい

今回はそんな悩みを解決する要素が重複しないListの作り方についてです。

HashSetを使って重複しないListを作る方法

ArrayList等で値が重複しないListを作ろうとすると自分で処理を書かなければならずとても面倒です。

しかし、HashSetを使うことでList内の重複しているデータを削除することが可能です!

HashSetの使い方を覚えるために次のプログラムを見てみましょう。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = new ArrayList<String>(new HashSet<>(listA));
         
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
 
    }
}
[実行結果]
ListA = [s, a, m, u, r, a, i]
ListB = [a, r, s, u, i, m]

このようにHashSetを使うことでListAの重複する文字列の”a”が一つ削除されたListBができました!

実行結果からわかるように、HashSetを使うと要素の並び順が変わります。

要素の並び順を変えたくない場合は、次のようにLinkedHashSetを使います。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = new ArrayList<String>(new LinkedHashSet<>(listA));
         
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
 
    }
}
[実行結果]
ListA = [s, a, m, u, r, a, i]
ListB = [s, a, m, u, r, i]

このようにLinkedHashSetを使うことで要素の並び順を変えずに重複している要素を削除することができます。

Java8でStreamAPIを使う方法

最後にStreamAPIとdistinctメソッドを使った方法を解説します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        List<String> listA = new ArrayList<String>(Arrays.asList("s", "a", "m", "u", "r", "a", "i"));
        List<String> listB = listA.stream().distinct().collect(Collectors.toList());
         
        System.out.println("ListA = " + listA);
        System.out.println("ListB = " + listB);
 
    }
}
[実行結果]
ListA = [s, a, m, u, r, a, i]
ListB = [s, a, m, u, r, i]

この方法でも並び順を変えずに重複する要素を削除することができました!

ここではStreamAPIを使って、distinctメソッドで重複した要素を削除した後にcollect(Collectors.toList())でListに戻しています。

StreamAPIはJava8から追加されたデータの操作を簡単に行えるようにする機能です。
StreamAPIについては次の記事で詳しく解説しています!

まとめ

いかがでしたか?

今回はListから重複するデータを取り除く方法を解説しました。StreamAPIはListを便利に扱うことができるようになるのでぜひ覚えてください。

もし重複する要素のないListを作る方法を忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説