Einführung
In Java kann eine ArrayList doppelte Elemente speichern. Wenn wir die Duplikate entfernen und nur einzigartige Elemente behalten möchten, müssen wir bestimmte Schritte unternehmen. In diesem Lab werden wir lernen, auf zwei Arten Duplikate aus einer ArrayList zu entfernen: mit Hilfe eines HashSet und mit der distinct()-Methode von Stream.
Eine ArrayList erstellen
Erstellen Sie eine ArrayList und fügen Sie einigen Elementen hinzu. Hier ist ein Beispiel:
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("Original ArrayList: " + arrayList);
}
}
Um den Code im Terminal auszuführen, navigieren Sie zum Verzeichnis, in dem die Datei enthalten ist, und geben Sie den folgenden Befehl ein:
javac RemoveDuplicates.java && java RemoveDuplicates
Duplikate mit HashSet entfernen
Um Duplikate mit einem HashSet zu entfernen, erstellen Sie zunächst ein HashSet und übergeben Sie die ArrayList an seinen Konstruktor. Da HashSet nur einzigartige Elemente enthält, werden alle Duplikate eliminiert. Konvertieren Sie das resultierende HashSet anschließend wieder in eine ArrayList zurück.
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("Original ArrayList: " + arrayList);
// Entfernen von Duplikaten
HashSet<Integer> hashSet = new HashSet<>(arrayList);
arrayList.clear();
arrayList.addAll(hashSet);
System.out.println("ArrayList mit Duplikaten entfernt mit HashSet: " + arrayList);
}
}
Duplikate mit der distinct()-Methode von Stream entfernen
Um Duplikate mit der Stream-API zu entfernen, verwenden Sie zunächst die stream()-Methode von ArrayList, um einen Stream zu erstellen. Anschließend verwenden Sie die distinct()-Methode, um einen neuen Stream mit einzigartigen Elementen zurückzugeben. Schließlich verwenden Sie die collect()-Methode, um die Stream-Elemente als ArrayList zurückzugeben.
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("Original ArrayList: " + arrayList);
// Entfernen von Duplikaten
arrayList = (ArrayList<Integer>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList mit Duplikaten entfernt mit Stream: " + arrayList);
}
}
Beide Ansätze testen
Um beide Ansätze zu testen, kompilieren und führen Sie beide Codebeispiele im Terminal aus.
javac RemoveDuplicates.java && java RemoveDuplicates
Eine Funktion erstellen
Um es einfacher zu machen, Duplikate aus mehreren ArrayLists in unserem Programm zu entfernen, können wir eine Funktion erstellen. Hier ist ein Beispiel:
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("Original 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("Original ArrayList: " + arrayList2);
// Entfernen von Duplikaten mit HashSet
removeDuplicatesUsingHashSet(arrayList1);
removeDuplicatesUsingHashSet(arrayList2);
// Entfernen von Duplikaten mit 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("ArrayList mit Duplikaten entfernt mit HashSet: " + arrayList);
}
public static void removeDuplicatesUsingStream(ArrayList<Integer> arrayList) {
arrayList = (ArrayList<Integer>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList mit Duplikaten entfernt mit Stream: " + arrayList);
}
}
Kompilieren und Ausführen
Um den Code im Terminal auszuführen, navigieren Sie zum Verzeichnis, in dem die Datei enthalten ist, und geben Sie den folgenden Befehl ein:
javac RemoveDuplicates.java && java RemoveDuplicates
Datentyp ändern
Die removeDuplicatesUsingHashSet()-Funktion funktioniert nur für ArrayList<Integer>. Um die Funktion flexibler zu machen, können wir den Datentyp zu ArrayList<T> ändern.
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("Original 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("Original ArrayList: " + arrayList2);
// Entfernen von Duplikaten mit HashSet
removeDuplicatesUsingHashSet(arrayList1);
removeDuplicatesUsingHashSet(arrayList2);
// Entfernen von Duplikaten mit 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("ArrayList mit Duplikaten entfernt mit HashSet: " + arrayList);
}
public static <T> void removeDuplicatesUsingStream(ArrayList<T> arrayList) {
arrayList = (ArrayList<T>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList mit Duplikaten entfernt mit Stream: " + arrayList);
}
}
Kompiliere und führe die modifizierte Version aus
Um den Code im Terminal auszuführen, navigieren Sie zum Verzeichnis, in dem die Datei enthalten ist, und geben Sie den folgenden Befehl ein:
javac RemoveDuplicates.java && java RemoveDuplicates
Benutzer-Eingabe hinzufügen
Um unser Programm interaktiver zu gestalten, können wir dem Benutzer ermöglichen, die ganzen Zahlen einzugeben, die sie der ArrayList hinzufügen möchten. Hier ist ein Beispiel:
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("Original ArrayList: " + arrayList1);
// Entfernen von Duplikaten mit HashSet
removeDuplicatesUsingHashSet(arrayList1);
// Entfernen von Duplikaten mit 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("ArrayList mit Duplikaten entfernt mit HashSet: " + arrayList);
}
public static <T> void removeDuplicatesUsingStream(ArrayList<T> arrayList) {
arrayList = (ArrayList<T>) arrayList.stream().distinct().collect(Collectors.toList());
System.out.println("ArrayList mit Duplikaten entfernt mit Stream: " + arrayList);
}
public static int getUserInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("Geben Sie eine ganze Zahl ein, um der ArrayList hinzuzufügen, oder -1, um abzubrechen: ");
if (scanner.hasNextInt()) {
return scanner.nextInt();
}
return -1;
}
}
Kompiliere und führe die Endversion aus
Um den Code im Terminal auszuführen, navigieren Sie zum Verzeichnis, in dem die Datei enthalten ist, und geben Sie den folgenden Befehl ein:
javac RemoveDuplicates.java && java RemoveDuplicates
Zusammenfassung
In diesem Lab haben wir gelernt, auf zwei Arten Duplikate aus einer ArrayList zu entfernen: mit einem HashSet und mit der distinct()-Methode von Stream. Wir haben auch eine Funktion erstellt, um es einfacher zu machen, Duplikate aus mehreren ArrayLists in unserem Programm zu entfernen, den Datentyp geändert, um die Funktion flexibler zu machen, und dem Benutzer ermöglicht, die ganzen Zahlen einzugeben, die sie der ArrayList hinzufügen möchten.



