English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial lernen wir anhand von Beispielen die Java EnumSet-Klasse und ihre verschiedenen Methoden kennen.
Die EnumSet-Klasse im Java Collections Framework bietet eine Sammlungsimplementierung für die Elemente eines einzelnen Enums.
Stellen Sie sicher, dass Sie Java Collections Framework und EnumSet Klasse verstehen, bevor Sie EnumSet lernenJava Enums.
es implementiertSet-Schnittstelle.
Um einen EnumSet zu erstellen, müssen wir zunächst das Paket java.util.EnumSet importieren.
Unterschiedlich von anderen Set-Implementierungen haben Enum-Sets keinen öffentlichen Konstruktor. Wir müssen vorgegebene Methoden verwenden, um einen EnumSet zu erstellen.
Die Methode allOf() erstellt eine EnumSet, das alle Werte des angegebenen Enum-Typs Size enthält. Zum Beispiel
import java.util.EnumSet; class Main { //Ein Enum namens Size enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Mit allOf() einen EnumSet erstellen EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: ") + sizes); } }
Ausgaberesultat
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Beachten Sie die Deklaration
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Hier stellt Size.class den von uns erstellten Enum Size dar.
Die Methode noneOf() erstellt eine leere EnumSet. Zum Beispiel
import java.util.EnumSet; class Main { //Ein Enum namens Size enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // Mit noneOf() einen EnumSet erstellen EnumSet<Size> sizes = EnumSet.noneOf(Size.class); System.out.println("Leere EnumSet: " + sizes); } }
Ausgaberesultat
Leere EnumSet: []
Hier erstellen wir eine leere Enum namens sizes.
Beachten Sie:Wir können nur Elemente vom Typ Enum Size in dem obigen Programm einfügen. Dies liegt daran, dass wir eine leere EnumSet mit dem Enum Size erstellt haben.
Die Methode range() erstellt eine EnumSet, die e enthält1und e2alle zwischen den Enum-Werten, einschließlich dieser beiden Werte. Zum Beispiel
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Eine EnumSet mit der Methode range() erstellen EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: ") + sizes); } }
Ausgaberesultat
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
Die Methode of() erstellt einen EnumSet, 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) { //Mit einem einzigen Parameter verwenden 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); } }
Ausgaberesultat
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
Die Klasse EnumSet bietet einige Methoden, um verschiedene Elemente des EnumSets auszuführen.
add() - Fügt den angegebenen Enum-Wert in das EnumSet ein
addAll() - Fügt alle Elemente der angegebenen Kollection in die Kollection ein
Beispiel,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Mit allOf() einen EnumSet erstellen EnumSet<Size> sizes1 = EnumSet.allOf(Size.class); //Mit noneOf() einen EnumSet erstellen EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class); //Mit der Methode add Elemente hinzufügen sizes2.add(Size.MEDIUM); System.out.println("EnumSet mit der Methode add(): " + sizes2); //Mit der Methode addAll() sizes2.addAll(sizes1); System.out.println("EnumSet mit der Methode addAll(): " + sizes2); } }
Ausgaberesultat
EnumSet mit der Methode add(): [MEDIUM] EnumSet mit der Methode addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
Im obigen Beispiel haben wir die Methode addAll() verwendet, um sizes1Alle Elemente des EnumSets in sizes einfügen2des EnumSets.
Man kann auch die addAll()-Methode verwenden, um Elemente anderer Kollectionen (wie ArrayList, LinkedList usw.) in das EnumSet einzufügen. Alle Kollectionen sollten jedoch das gleiche Enum-Typ haben.
Um die Elemente des EnumSets zu erreichen, können wir den iterator()-Methoden verwenden. Um diese Methode zu verwenden, müssen wir das Paket java.util.Iterator importieren. Zum Beispiel,
import java.util.EnumSet; import java.util.Iterator; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Mit allOf() einen EnumSet erstellen 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(", "); } } }
Ausgaberesultat
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Hinweise:
hasNext() - Gibt true zurück, wenn im EnumSet das nächste Element existiert
next() - Rückgabe des nächsten Elements im EnumSet
remove() - Entferne das angegebene Element aus der Mengenmenge
removeAll() - Entferne alle Elemente aus der Mengenmenge
Beispiel,
import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { //Verwende allOf() zum Erstellen von EnumSet EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: ") + sizes); // Verwende remove() boolean Wert1 = sizes.remove(Size.MEDIUM); System.out.println("Wurde MEDIUM entfernt? ") + Wert1); // Verwende removeAll() boolean Wert2 = sizes.removeAll(sizes); System.out.println("Sind alle Elemente entfernt? ") + Wert2); } }
Ausgaberesultat
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] Wurde MEDIUM entfernt? true Sind alle Elemente entfernt? true
Methode | Beschreibung |
---|---|
copyOf() | Erstelle eine Kopie von EnumSet |
contains() | Suche nach dem vom EnumSet angegebenen Element und gibt das Boolean-Ergebnis zurück |
isEmpty() | Überprüfen, ob EnumSet leer ist |
size() | Rückgabe der Größe von EnumSet |
clear() | Entferne alle Elemente aus EnumSet |
Die EnumSet-Klasse implementiert auch die Schnittstellen Cloneable und Serializable.
Klon-Interface (Cloneable)
Es ermöglicht der EnumSet-Klasse, eine Kopie des Class-Instanzobjekts zu erstellen.
Serialisierbare Schnittstelle (Serializable)
Jedes Mal, wenn ein Java-Objekt über das Netzwerk übertragen werden muss, muss das Objekt in Bits oder Bytes umgewandelt werden. Dies liegt daran, dass Java-Objekte nicht über das Netzwerk übertragen werden können.
Das Serializable Interface ermöglicht es einer Klasse, serialisiert zu werden. Dies bedeutet, dass Serializable die Objekte der实现的Klasse in Bits oder Bytes umwandeln kann.
Enum-Sets bieten eine effizientere Methode zum Speichern von Enum-Werten als andere Set-Implementierungen (wie HashSet, TreeSet).
Enum-Sets speichern nur die Enum-Werte spezifischer Enums. Daher weiß die JVM bereits alle möglichen Werte des Sets.
Das ist der Grund, warum Enum-Sets intern als Bit-Sequenz implementiert werden. Die Bits spezifizieren, ob ein Element im Enum-Set vorkommt.
Öffnet den相应的位,如果集合中存在该元素。