Javaでリストを操作する際、重複したデータを削除するケースは頻繁に発生します。この記事では、Javaでリストから重複するデータを効率的に削除する3つの主要な方法を紹介します。
HashSet または LinkedHashSet を使う方法
最もシンプルで一般的な方法は、HashSet または LinkedHashSet を利用する方法です。
HashSetの基本
HashSet は集合を表すデータ構造で、その性質上、重複したデータを持たないことが保証されています。これを利用して、リストのデータを一度HashSetに変換することで、自動的に重複が削除されます。
しかし、HashSetのもう一つの特性として、データの順序が保持されないことがあります。これは、特定の順序でデータを保持する必要がない場面で有用です。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> listWithDuplicates = new ArrayList<>();
listWithDuplicates.add("A");
listWithDuplicates.add("B");
listWithDuplicates.add("A");
listWithDuplicates.add("C");
List<String> listWithoutDuplicates = new ArrayList<>(new HashSet<>(listWithDuplicates));
System.out.println(listWithoutDuplicates); // [A, B, C] (順序は保障されません)
}
}
LinkedHashSetとは
順序を保持しつつ重複を削除したい場合、LinkedHashSetを使用します。LinkedHashSetは、データの追加された順序を保持する特性があります。
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> listWithDuplicates = new ArrayList<>();
listWithDuplicates.add("A");
listWithDuplicates.add("B");
listWithDuplicates.add("A");
listWithDuplicates.add("C");
List<String> listWithoutDuplicates = new ArrayList<>(new LinkedHashSet<>(listWithDuplicates));
System.out.println(listWithoutDuplicates); // [A, B, C]
}
}
Java 8 Stream APIを使う方法
Java 8から追加されたStream APIは、リストや他のコレクションのデータを柔軟に処理する強力なツールです。このAPIを利用して、簡潔かつ読みやすく重複を削除することもできます。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> listWithDuplicates = new ArrayList<>();
listWithDuplicates.add("A");
listWithDuplicates.add("B");
listWithDuplicates.add("A");
listWithDuplicates.add("C");
List<String> listWithoutDuplicates = listWithDuplicates.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(listWithoutDuplicates); // [A, B, C]
}
}
distinct() メソッドをストリームに適用することで、重複する要素をフィルタリングします。その後、collect()メソッドを使用して、フィルタリングされたデータを再びリストに変換します。
まとめ
Javaでリストの重複を削除する方法は複数存在し、ケースや要件に応じて適切な方法を選択することが重要です。HashSetやLinkedHashSetはシンプルで手早く実装できる一方、Stream APIは現代的なJavaのコーディングスタイルであるため、どのシチュエーションにも適しています。