Java-EnumSet
Java-EnumSet
In diesem Tutorial lernen wir anhand von Beispielen die Java-Klasse EnumSet und ihre verschiedenen Methoden kennen.
Der EnumSet
Klasse des Java Collections Framework stellt eine Set-Implementierung von Elementen einer einzelnen Aufzählung bereit.
Bevor Sie etwas über EnumSet lernen, sollten Sie sich unbedingt mit Java Enums auskennen.
Es implementiert die Set-Schnittstelle.
EnumSet erstellen
Um ein Enum-Set zu erstellen, müssen wir den java.util.EnumSet
importieren Paket zuerst.
Im Gegensatz zu anderen Set-Implementierungen hat das Enum-Set keine öffentlichen Konstruktoren. Wir müssen die vordefinierten Methoden verwenden, um einen Aufzählungssatz zu erstellen.
1. Verwendung von allOf(Size)
Die allof()
-Methode erstellt einen Aufzählungssatz, der alle Werte des angegebenen Aufzählungstyps Size enthält . Zum Beispiel
import java.util.EnumSet;
class Main {
// an enum named Size
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
}
}
Ausgabe
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Beachten Sie die Anweisung,
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Hier, Size.class bezeichnet die Größe enum, die wir erstellt haben.
2. noneOf(Size) verwenden
Die noneOf()
-Methode erstellt einen leeren Aufzählungssatz. Zum Beispiel
import java.util.EnumSet;
class Main {
// an enum type Size
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using noneOf()
EnumSet<Size> sizes = EnumSet.noneOf(Size.class);
System.out.println("Empty EnumSet: " + sizes);
}
}
Ausgabe
Empty EnumSet : []
Hier haben wir eine leere Aufzählung namens sizes erstellt .
Hinweis :Wir können nur Elemente vom Aufzählungstyp Size einfügen im obigen Programm. Das liegt daran, dass wir unser leeres Enum-Set mit Size erstellt haben Aufzählung.
3. Verwendung der Methode range(e1, e2)
Die range()
-Methode erstellt einen Aufzählungssatz, der alle Werte einer Aufzählung zwischen e1 enthält und e2 einschließlich beider Werte. Zum Beispiel
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using range()
EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);
System.out.println("EnumSet: " + sizes);
}
}
Ausgabe
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
4. Verwendung der Methode ()
Die of()
-Methode erstellt einen Aufzählungssatz, der die angegebenen Elemente enthält. Zum Beispiel
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Using of() with a single parameter
EnumSet<Size> sizes1 = EnumSet.of(Size.MEDIUM);
System.out.println("EnumSet1: " + sizes1);
EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
System.out.println("EnumSet2: " + sizes2);
}
}
Ausgabe
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
Methoden von EnumSet
Die EnumSet
Die Klasse stellt Methoden bereit, mit denen wir verschiedene Elemente auf dem Enum-Set ausführen können.
Elemente in EnumSet einfügen
add()
- fügt angegebene Enum-Werte in den Enum-Satz einaddAll()
fügt alle Elemente der angegebenen Sammlung in die Menge ein
Zum Beispiel
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes1 = EnumSet.allOf(Size.class);
// Creating an EnumSet using noneOf()
EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class);
// Using add method
sizes2.add(Size.MEDIUM);
System.out.println("EnumSet Using add(): " + sizes2);
// Using addAll() method
sizes2.addAll(sizes1);
System.out.println("EnumSet Using addAll(): " + sizes2);
}
}
Ausgabe
EnumSet using add(): [MEDIUM] EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
Im obigen Beispiel haben wir den addAll()
verwendet Methode zum Einfügen aller Elemente eines Aufzählungssatzes sizes1 zu einem Aufzählungssatz sizes2 .
Es ist auch möglich, Elemente aus anderen Sammlungen wie ArrayList
einzufügen , LinkedList
, etc. zu einem Enum-Set mit addAll()
. Alle Sammlungen sollten jedoch vom gleichen Aufzählungstyp sein.
Zugriff auf EnumSet-Elemente
Um auf Elemente eines Enum-Sets zuzugreifen, können wir den iterator()
verwenden Methode. Um diese Methode zu verwenden, müssen wir den java.util.Iterator
importieren Paket. Zum Beispiel
import java.util.EnumSet;
import java.util.Iterator;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating an EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Iterator<Size> iterate = sizes.iterator();
System.out.print("EnumSet: ");
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Ausgabe
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Hinweis :
hasNext()
gibttrue
zurück wenn es ein nächstes Element im Enum-Set gibtnext()
gibt das nächste Element im Aufzählungssatz zurück
EnumSet-Elemente entfernen
remove()
- entfernt das angegebene Element aus dem Enum-SetremoveAll()
- entfernt alle Elemente aus dem Enum-Set
Zum Beispiel
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating EnumSet using allOf()
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
// Using remove()
boolean value1 = sizes.remove(Size.MEDIUM);
System.out.println("Is MEDIUM removed? " + value1);
// Using removeAll()
boolean value2 = sizes.removeAll(sizes);
System.out.println("Are all elements removed? " + value2);
}
}
Ausgabe
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] Is MEDIUM removed? true Are all elements removed? true
Andere Methoden
Methode | Beschreibung |
---|---|
copyOf() | Erzeugt eine Kopie von EnumSet |
contains() | Sucht den EnumSet für das angegebene Element und gibt ein boolesches Ergebnis | zurück
isEmpty() | Überprüft, ob der EnumSet ist leer |
size() | Gibt die Größe von EnumSet zurück |
clear() | Entfernt alle Elemente aus EnumSet |
Klonbare und serialisierbare Schnittstellen
Der EnumSet
Klasse implementiert auch Cloneable
und Serializable
Schnittstellen.
Klonbare Oberfläche
Es erlaubt den EnumSet
Klasse, um eine Kopie von Instanzen der Klasse zu erstellen.
Serialisierbare Schnittstelle
Wann immer Java-Objekte über ein Netzwerk übertragen werden müssen, müssen Objekte in Bits oder Bytes umgewandelt werden. Dies liegt daran, dass Java-Objekte nicht über das Netzwerk übertragen werden können.
Der Serializable
-Schnittstelle ermöglicht die Serialisierung von Klassen. Damit sind Objekte der Klassen gemeint, die Serializable
implementieren kann in Bits oder Bytes umgewandelt werden.
Warum EnumSet?
Der EnumSet
bietet eine effizientere Möglichkeit zum Speichern von Enum-Werten als andere Set-Implementierungen (wie HashSet
, TreeSet
).
Ein Aufzählungssatz speichert nur Aufzählungswerte einer bestimmten Aufzählung. Daher kennt die JVM bereits alle möglichen Werte des Satzes.
Aus diesem Grund werden Enum-Sets intern als Folge von Bits implementiert. Bits gibt an, ob Elemente im Enum-Set vorhanden sind oder nicht.
Das Bit eines entsprechenden Elements wird eingeschaltet, wenn dieses Element in der Menge vorhanden ist.
Java