English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java-Grundlagen-Tutorial

Java Prozesssteuerung

Java Array

Java Objektorientiert (I)

Java Objektorientiert (II)

Java Objektorientiert (III)

Java-Exception-Verarbeitung

Java Liste (List)

Java Queue (Warteschlange)

Java Map Collection

Java Set Collection

Java Input/Output (I/O)

Java Reader/Writer

Andere Themen von Java

Java EnumSet

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.

EnumSet erstellen

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.

1.Verwenden Sie allOf(Size)

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.

2.Verwenden Sie noneOf(Size)

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.

3.Verwenden Sie range(e1,e2Methode)

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]

4.Mit der Methode of()

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]

Methoden des EnumSets

Die Klasse EnumSet bietet einige Methoden, um verschiedene Elemente des EnumSets auszuführen.

Fügt das Element in den EnumSet ein

  • 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.

EnumSet-Elemente erreichen

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

Entferne Elemente aus 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

Andere Methoden

MethodeBeschreibung
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

Klon- und serialisierbare Schnittstellen

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.

Warum EnumSet wählen?

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相应的位,如果集合中存在该元素。