Ein Set ist einfach eine Sammlung einzigartiger Objekte. Einzigartig bedeutet, dass keine zwei Objekte denselben Wert bzw. dieselben Werte haben können. Abhängig von der Implementierung des Sets kann es bestellt werden oder nicht. Der Java-Satz als abstrakter Datentyp (ADT) verfügt über einige Schlüsseloperationen (wobei T einen beliebigen Datentyp darstellt, z. B. int, String oder ein beliebiges Klassenobjekt):
boolean add(T item): gibt true zurück, wenn das Element erfolgreich zum Set hinzugefügt wurde, und false, wenn das Element bereits im Set war.boolean remove(T item): gibt true zurück, wenn das Element erfolgreich aus der Menge entfernt wurde, andernfalls false (wenn das Element nicht in der Menge enthalten war).boolean contains(T item): Gibt „true“ zurück, wenn das Element in der Menge ist, andernfalls „false“.boolean isEmpty(): Gibt true zurück, wenn die Menge leer ist, andernfalls false.
contains()Funktion bietet dafür eine hervorragende Laufzeit: O(1) oder O(log n) Zeitkomplexität, je nachdem, ob die verwendete Implementierung a HashSetoder a istTreeSet, bzw. Wofür könnte ein Set also verwendet werden? Nun, wenn Sie jemals den Überblick über viele unterschiedliche Objekte – wie IDs, Namen oder andere eindeutige Identifikatoren – behalten und häufig überprüfen müssen, ob ein Element in einer solchen Sammlung vorhanden ist, dann ist ein Set wahrscheinlich eine gute Wahl. Hier ist ein Beispiel für den Anwendungsfall einer Menge: Stellen Sie sich vor, Sie haben eine Liste von StudentObjekten, die alle Schüler einer bestimmten Klasse repräsentieren. Jeder Studentkann einen eindeutigen Namen (string) und eine eindeutige Note (int) für diese Klasse haben. Wenn Sie häufig auf eine Liste aller A-Schüler (Note >=90) verweisen möchten, wäre es mühsam, diese Liste zu durchlaufen und jedes Mal die Note jedes Schülers zu überprüfen. Stattdessen könnten Sie eine Reihe HashSetvon Zeichenfolgen verwenden, die alle A-Schüler in der Klasse im Auge behält, etwa so:
- Jedes Mal, wenn die Noten der Schüler aktualisiert werden, können Sie einfach überprüfen, ob die neue Note des Schülers größer oder gleich 90 ist oder nicht.
- Wenn ja, fügen Sie sie der Menge der A-Schüler hinzu, die sie verwenden
add()- Wenn sie bereits ein A-Schüler waren, wird dieser Vorgang einfach ignoriert.
- Wenn nicht, entfernen Sie sie aus der Gruppe der A-Schüler, die sie verwenden
remove()- Wenn sie zu diesem Zeitpunkt kein A-Schüler waren, wird dieser Vorgang einfach ignoriert.
- Wenn ja, fügen Sie sie der Menge der A-Schüler hinzu, die sie verwenden
contains(“Johnny Appleseed”)am Set vorbeischauen. Dies ist natürlich nur ein Beispiel für einen Anwendungsfall für ein Set, und dieses spezielle Problem, den Überblick über A-Schüler zu behalten, könnte auf andere Weise gelöst werden.
Implementierungen: HashSet in Java und Java TreeSet-Beispiele
Sowohl dieHashSetin Java als auch die TreeSetin Java kommen in der java.utils package. Sie können sie als solche importieren:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
oder
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
Der Hauptunterschied zwischen Java HashSetund Java TreeSetbesteht darin, dass das TreeSetsortiert ist, das jedoch HashSetnicht. Aus diesem Grund TreeSethat die eine O(log n)-Zeitkomplexität für Schlüsseloperationen, wohingegen sie HashSeteine O(1)- oder konstante Zeitkomplexität hat; Sie TreeSetmüssen jederzeit für Ordnung sorgen. Zusätzlich zu den zuvor erwähnten Schlüsselsatzoperationen verfügen sowohl die HashSetals auch TreeSetin Java über einige weitere hilfreiche Funktionen:
void clear(): löscht die Menge aller Objekte.int size(): gibt die Anzahl der Objekte in der Menge zurück.Object clone(): Gibt eine flache Kopie des Satzes zurück.Iterator iterator(): Gibt einen Iterator an die Menge zurück, beginnend beim ersten Objekt.
size()wenn Sie sehen möchten, wie viele A-Studenten Sie haben, oder clear()wenn Sie die Liste am Ende des Semesters löschen möchten. Sie können damit clone()einen Klon der Liste der A-Studenten zu einem bestimmten Zeitpunkt erstellen und aufbewahren, beispielsweise bei Zwischenberichten (auf diese Weise bleibt der Klon nicht zusammen mit dem Original auf dem neuesten Stand).
Java HashSet-Beispiel
Hier ist ein kurzes Beispiel für die Verwendung einesHashSetof s in Java:String
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
Ausgang: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Java TreeSet-Beispiel
Ein Java-Set-Beispiel könnte Ihnen helfen, die Theorie zu verstehen. Hier ist das kurze Beispiel für die Verwendung von aTreeSetof s in Java:String
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
Ausgang: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
Das ist alles! Hoffe das hat geholfen 😊
GO TO FULL VERSION