Verwendung von HashSet zur effizienten Duplikatprüfung
Im vorherigen Schritt haben wir geschachtelte Schleifen verwendet, um Duplikate zu finden. Dies ist zwar einfach, kann aber für große Arrays langsam sein. In diesem Schritt lernen wir eine effizientere Methode zur Duplikatfindung mithilfe eines HashSet
kennen.
Ein HashSet
ist eine Sammlung (Collection) in Java, die einzigartige Elemente speichert. Das bedeutet, dass wenn Sie versuchen, ein Element hinzuzufügen, das bereits im HashSet
enthalten ist, der Hinzufüge-Vorgang fehlschlägt (oder genauer gesagt, false
zurückgibt). Wir können diese Eigenschaft nutzen, um Duplikate effizient zu erkennen.
Hier ist die Idee: Wir durchlaufen das Array, und für jedes Element versuchen wir, es einem HashSet
hinzuzufügen. Wenn die add()
-Methode false
zurückgibt, bedeutet das, dass das Element bereits im Set enthalten ist und somit ein Duplikat ist.
Erstellen wir eine neue Java-Datei mit dem Namen FindDuplicatesHashSet.java
in Ihrem ~/project
-Verzeichnis.
Öffnen Sie die Datei FindDuplicatesHashSet.java
im Code-Editor und fügen Sie den folgenden Java-Code hinzu:
import java.util.HashSet;
import java.util.Set;
public class FindDuplicatesHashSet {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 2, 7, 8, 8, 3};
// Create a HashSet to store unique elements
Set<Integer> uniqueElements = new HashSet<>();
System.out.println("Finding duplicate elements using HashSet:");
// Iterate through the array
for (int number : numbers) {
// Try to add the element to the HashSet
// If add() returns false, the element is a duplicate
if (!uniqueElements.add(number)) {
System.out.println("Duplicate found: " + number);
}
}
}
}
Schauen wir uns die neuen Teile dieses Codes an:
import java.util.HashSet;
und import java.util.Set;
: Diese Zeilen importieren die notwendigen Klassen für die Verwendung von HashSet
.
Set<Integer> uniqueElements = new HashSet<>();
: Diese Zeile erstellt ein leeres HashSet
, das Integer
-Objekte speichern wird. Wir verwenden Set
als Typ, da HashSet
das Set
-Interface implementiert.
for (int number : numbers)
: Dies ist eine erweiterte for-Schleife (auch als for-each-Schleife bekannt), die eine bequeme Möglichkeit ist, jedes Element des numbers
-Arrays zu durchlaufen.
!uniqueElements.add(number)
: Dies ist die Kernlogik. uniqueElements.add(number)
versucht, die aktuelle number
zum HashSet
hinzuzufügen. Wenn die Zahl bereits vorhanden ist, gibt add()
false
zurück. Der !
-Operator negiert dieses Ergebnis, sodass die if
-Bedingung nur dann wahr ist, wenn add()
false
zurückgibt, was auf ein Duplikat hinweist.
Speichern Sie die Datei (Strg + S
oder Cmd + S
).
Jetzt kompilieren Sie den Java-Code im Terminal:
javac FindDuplicatesHashSet.java
Wenn die Kompilierung erfolgreich ist, führen Sie das Programm aus:
java FindDuplicatesHashSet
Sie sollten die Ausgabe sehen, die die mit der HashSet
-Methode gefundenen doppelten Elemente auflistet. Beachten Sie, dass diese Methode im Allgemeinen schneller ist als der Ansatz mit geschachtelten Schleifen, insbesondere für größere Arrays, da das Hinzufügen und Prüfen von Elementen in einem HashSet
sehr effizient ist.