はじめに
Java では、ArrayList
には重複した要素を格納できます。重複を削除して一意の要素のみを残すには、特定の手順を踏む必要があります。この実験では、HashSet
を使用する方法と Stream
の distinct()
メソッドを使用する方法の 2 通りで ArrayList
から重複を削除する方法を学びます。
Java では、ArrayList
には重複した要素を格納できます。重複を削除して一意の要素のみを残すには、特定の手順を踏む必要があります。この実験では、HashSet
を使用する方法と Stream
の distinct()
メソッドを使用する方法の 2 通りで ArrayList
から重複を削除する方法を学びます。
ArrayList を作成して、そこにいくつかの要素を追加します。以下は例です。
import java.util.ArrayList;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(2);
System.out.println("元の ArrayList: " + arrayList);
}
}
コードをターミナルで実行するには、ファイルが含まれているディレクトリに移動して、次のコマンドを入力します。
javac RemoveDuplicates.java && java RemoveDuplicates
HashSet を使って重複を削除するには、まず HashSet を作成し、そのコンストラクタに ArrayList を渡します。HashSet は一意の要素のみを含むため、これによりすべての重複が削除されます。結果の HashSet を再び ArrayList に変換します。
import java.util.ArrayList;
import java.util.HashSet;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(2);
System.out.println("元の ArrayList: " + arrayList);
// 重複を削除する
HashSet<Integer> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("HashSet を使って重複が削除された ArrayList: " + arrayList);
}
}
Stream API を使って重複を削除するには、まず ArrayList の stream() メソッドを使って Stream を作成します。その後、distinct() メソッドを使って一意の要素を持つ新しいストリームを返します。最後に、collect() メソッドを使ってストリーム要素を ArrayList として返します。
import java.util.ArrayList;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(2);
System.out.println("元の ArrayList: " + arrayList);
// 重複を削除する
arrayList = (ArrayList<Integer>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("Stream を使って重複が削除された ArrayList: " + arrayList);
}
}
両方のアプローチをテストするには、ターミナルで両方のコード例をコンパイルして実行します。
javac RemoveDuplicates.java && java RemoveDuplicates
プログラム内の複数の ArrayList から重複を削除する作業を簡単にするために、関数を作成することができます。以下は例です。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.stream.Collectors;
public class RemoveDuplicates {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(1);
arrayList1.add(2);
arrayList1.add(3);
arrayList1.add(1);
arrayList1.add(4);
arrayList1.add(2);
System.out.println("元の ArrayList: " + arrayList1);
ArrayList<Integer> arrayList2 = new ArrayList<>();
arrayList2.add(5);
arrayList2.add(6);
arrayList2.add(1);
arrayList2.add(7);
arrayList2.add(5);
System.out.println("元の ArrayList: " + arrayList2);
// HashSet を使って重複を削除する
removeDuplicatesUsingHashSet(arrayList1);
removeDuplicatesUsingHashSet(arrayList2);
// Stream を使って重複を削除する
removeDuplicatesUsingStream(arrayList1);
removeDuplicatesUsingStream(arrayList2);
}
public static void removeDuplicatesUsingHashSet(ArrayList<Integer> arrayList) {
HashSet<Integer> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("HashSet を使って重複が削除された ArrayList: " + arrayList);
}
public static void removeDuplicatesUsingStream(ArrayList<Integer> arrayList) {
arrayList = (ArrayList<Integer>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("Stream を使って重複が削除された ArrayList: " + arrayList);
}
}
端末でコードを実行するには、ファイルが含まれているディレクトリに移動し、次のコマンドを入力します。
javac RemoveDuplicates.java && java RemoveDuplicates
removeDuplicatesUsingHashSet()
関数は ArrayList<Integer>
のみに対して機能します。関数をより柔軟にするために、データ型を ArrayList<T>
に変更することができます。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.stream.Collectors;
public class RemoveDuplicates<T> {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
arrayList1.add(1);
arrayList1.add(2);
arrayList1.add(3);
arrayList1.add(1);
arrayList1.add(4);
arrayList1.add(2);
System.out.println("元の ArrayList: " + arrayList1);
ArrayList<String> arrayList2 = new ArrayList<>();
arrayList2.add("Hello");
arrayList2.add("World");
arrayList2.add("Java");
arrayList2.add("Hello");
arrayList2.add("Mars");
System.out.println("元の ArrayList: " + arrayList2);
// HashSet を使って重複を削除する
removeDuplicatesUsingHashSet(arrayList1);
removeDuplicatesUsingHashSet(arrayList2);
// Stream を使って重複を削除する
removeDuplicatesUsingStream(arrayList1);
removeDuplicatesUsingStream(arrayList2);
}
public static <T> void removeDuplicatesUsingHashSet(ArrayList<T> arrayList) {
HashSet<T> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("HashSet を使って重複が削除された ArrayList: " + arrayList);
}
public static <T> void removeDuplicatesUsingStream(ArrayList<T> arrayList) {
arrayList = (ArrayList<T>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("Stream を使って重複が削除された ArrayList: " + arrayList);
}
}
端末でコードを実行するには、ファイルが含まれているディレクトリに移動し、次のコマンドを入力します。
javac RemoveDuplicates.java && java RemoveDuplicates
プログラムをより対話型にするために、ユーザーに ArrayList に追加したい整数を入力できるようにします。以下は例です。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.stream.Collectors;
public class RemoveDuplicates<T> {
public static void main(String[] args) {
ArrayList<Integer> arrayList1 = new ArrayList<>();
int input = getUserInput();
while (input!= -1) {
arrayList1.add(input);
input = getUserInput();
}
System.out.println("元の ArrayList: " + arrayList1);
// HashSet を使って重複を削除する
removeDuplicatesUsingHashSet(arrayList1);
// Stream を使って重複を削除する
removeDuplicatesUsingStream(arrayList1);
}
public static <T> void removeDuplicatesUsingHashSet(ArrayList<T> arrayList) {
HashSet<T> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("HashSet を使って重複が削除された ArrayList: " + arrayList);
}
public static <T> void removeDuplicatesUsingStream(ArrayList<T> arrayList) {
arrayList = (ArrayList<T>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("Stream を使って重複が削除された ArrayList: " + arrayList);
}
public static int getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("ArrayList に追加する整数を入力してください。終了するには -1 を入力してください: ");
if (scanner.hasNextInt()) {
return scanner.nextInt();
}
return -1;
}
}
端末でコードを実行するには、ファイルが含まれているディレクトリに移動し、次のコマンドを入力します。
javac RemoveDuplicates.java && java RemoveDuplicates
この実験では、HashSet
を使う方法と Stream
の distinct()
メソッドを使う方法の2つで、ArrayList
から重複を削除する方法を学びました。また、プログラム内の複数の ArrayList
から重複を削除するのを簡単にするための関数を作成し、関数をより柔軟にするためにデータ型を変更し、ユーザーに ArrayList
に追加したい整数を入力できるようにしました。