Duplikate aus ArrayList entfernen

JavaJavaBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ConcurrentandNetworkProgrammingGroup(["Concurrent and Network Programming"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/hashset("HashSet") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("Generics") java/FileandIOManagementGroup -.-> java/stream("Stream") java/ConcurrentandNetworkProgrammingGroup -.-> java/working("Working") subgraph Lab Skills java/arrays -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/collections_methods -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/classes_objects -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/user_input -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/arraylist -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/hashset -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/generics -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/stream -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} java/working -.-> lab-117445{{"Duplikate aus ArrayList entfernen"}} end

Erstellen einer ArrayList

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

Entfernen von Duplikaten mit HashSet

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);
    }
}

Entfernen von Duplikaten mit der distinct()-Methode von Stream

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);
    }
}

Testen beider Ansätze

Um beide Ansätze zu testen, kompilieren und führen Sie beide Codebeispiele im Terminal aus.

javac RemoveDuplicates.java && java RemoveDuplicates

Erstellen einer Funktion

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);
    }
}

Kompilieren und Ausführen der modifizierten Version

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

Benutzerinput 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;
    }
}

Kompilieren und Ausführen der endgültigen Version

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.