CodeGym /Java-Blog /Random-DE /Das Java-Set als Schnittstelle
Autor
Aditi Nawghare
Software Engineer at Siemens

Das Java-Set als Schnittstelle

Veröffentlicht in der Gruppe Random-DE
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): Das Java-Set als Schnittstelle - 1
  • 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.
Die Mengen in Java haben ziemlich selbsterklärende Funktionssignaturen (wie sie sollten). Wenn Sie einem Set zwei identische Artikel hinzufügen, ist nur der zuerst hinzugefügte Artikel im Set. Alle nachfolgenden Versuche, dasselbe Element hinzuzufügen, werden ignoriert, es sei denn, das Element wird zuerst entfernt. Eine der am häufigsten verwendeten Mengenoperationen ist die Überprüfung, ob ein Element innerhalb einer bestimmten Menge liegt. Die 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 verwendenadd()
      • 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 verwendenremove()
      • Wenn sie zu diesem Zeitpunkt kein A-Schüler waren, wird dieser Vorgang einfach ignoriert.
Mit einem solchen System hätten Sie immer einen aktuellen Überblick über alle A-Schüler Ihrer Klasse. Wenn Sie überprüfen möchten, ob Johnny Appleseed in Ihrer Klasse gut abschneidet, können Sie dies ganz einfach tun, indem Sie 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 die HashSetin 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.
Sie können sich vorstellen, diese Funktionen im Beispiel „Liste der A-Studenten“ zu nutzen: Sie könnten anrufen, 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 eines HashSetof 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 a TreeSetof 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 😊
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION