Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java EnumSet: Erstellung, Operationen und Performance-Tipps

Java EnumSet

Dieser Leitfaden führt Sie durch Erstellung, Manipulation und Optimierung von Java EnumSet-Collections mit hands-on Code-Beispielen und Best-Practice-Einblicken.

Die EnumSet-Klasse ist eine High-Performance-Set-Implementierung, die exklusiv für Enum-Typen designed ist. Sie implementiert das java.util.Set-Interface und erbt auch Cloneable und Serializable, was sie vielseitig und effizient macht.

Bevor Sie in EnumSet eintauchen, stellen Sie sicher, dass Sie mit Java Enums vertraut sind, da das Set eng an einen einzelnen Enum-Typ gekoppelt ist.

Java EnumSet: Erstellung, Operationen und Performance-Tipps


EnumSet erstellen

Anders als andere Set-Implementierungen stellt EnumSet keine öffentlichen Konstruktoren bereit. Stattdessen nutzen Sie seine statischen Factory-Methoden zum Bauen eines Sets.

1. Mit EnumSet.allOf()

Die allOf()-Methode erstellt ein Set, das jede Konstante des spezifizierten Enum-Typs enthält.

import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); } } 

Ausgabe

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]

2. Mit EnumSet.noneOf()

Erstellt ein leeres Set, das nur Werte des spezifizierten Enum-Typs enthalten kann.

import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.noneOf(Size.class); System.out.println("Empty EnumSet: " + sizes); } } 

Ausgabe

Empty EnumSet: []

Hinweis: Das resultierende Set akzeptiert nur Size-Konstanten, da es mit Size.class instanziiert wurde.

3. Mit EnumSet.range()

Erstellt ein Set, das alle Enum-Konstanten von unterer bis oberer Schranke inklusive enthält.

import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); } } 

Ausgabe

EnumSet: [MEDIUM, LARGE, EXTRALARGE]

4. Mit EnumSet.of()

Erstellt Set mit einem oder mehreren spezifischen Enum-Konstanten.

import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { 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]

Gängige Operationen auf EnumSet

Elemente hinzufügen

import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> all = EnumSet.allOf(Size.class); EnumSet<Size> selected = EnumSet.noneOf(Size.class); selected.add(Size.MEDIUM); System.out.println("After add(): " + selected); selected.addAll(all); System.out.println("After addAll(): " + selected); } } 

Ausgabe

After add(): [MEDIUM] After addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]

Beachten Sie, dass addAll() jedes Collection<Size> akzeptiert, inklusive Lists oder Sets, solange sie denselben Enum-Typ enthalten.

Elemente iterieren

Nutzen Sie einen Iterator zum Traversieren:

import java.util.EnumSet; import java.util.Iterator; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.allOf(Size.class); Iterator<Size> it = sizes.iterator(); System.out.print("EnumSet: "); while (it.hasNext()) { System.out.print(it.next() + ", "); } } } 

Ausgabe

EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Elemente entfernen

import java.util.EnumSet; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { EnumSet<Size> sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); boolean removed = sizes.remove(Size.MEDIUM); System.out.println("Is MEDIUM removed? " + removed); boolean cleared = sizes.removeAll(sizes); System.out.println("Are all elements removed? " + cleared); } } 

Ausgabe

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE] Is MEDIUM removed? true Are all elements removed? true

Zusätzliche Helfer-Methoden

MethodeBeschreibung
copyOf()Erstellt neues EnumSet mit gleichen Elementen.
contains()Prüft ob spezifische Konstante vorhanden.
isEmpty()Gibt true falls Set keine Elemente hat.
size()Gibt Anzahl Elemente zurück.
clear()Entfernt alle Elemente.

Cloneable und Serializable

EnumSet implementiert Cloneable, was Erstellung flacher Kopie via clone() ermöglicht. Es implementiert auch Serializable, was sichere Übertragung über Netzwerke oder Persistenz auf Disk erlaubt.

Warum EnumSet verwenden?

Da EnumSet Werte als Bitvektor speichert, führen Operationen wie add, remove und contains in konstanter Zeit mit minimalem Speicher-Overhead aus. Die JVM kennt bereits die exakte Menge möglicher Konstanten für ein gegebenes Enum, was EnumSet weit effizienter macht als generische Implementierungen wie HashSet oder TreeSet.

In der Praxis wählen Sie EnumSet, wann immer Sie ein High-Performance-Set von Enum-Werten benötigen.


Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  6. Java Enums meistern: Vollständiger Leitfaden zu Enums & Enum-Klassen
  7. Java Enum-Konstruktoren erklärt mit praktischem Beispiel
  8. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  9. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  10. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität