Java EnumSet

In deze tutorial zullen we met behulp van voorbeelden leren over de Java EnumSet-klasse en de verschillende methoden ervan.

De EnumSetklasse van het Java-verzamelingsraamwerk biedt een set-implementatie van elementen van een enkele opsomming.

Voordat u EnumSet leert kennen, moet u kennis hebben van Java Enums.

Het implementeert de Set-interface.

EnumSet maken

Om een ​​opsommingsset te maken, moeten we eerst het java.util.EnumSetpakket importeren .

In tegenstelling tot andere set-implementaties, heeft de enum-set geen openbare constructors. We moeten de vooraf gedefinieerde methoden gebruiken om een ​​opsommingsset te maken.

1. AllOf (Size) gebruiken

De allof()methode maakt een enum-set die alle waarden van het opgegeven enum-type Size bevat. Bijvoorbeeld,

 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 sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); ) ) 

Uitvoer

 EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Let op de verklaring,

 EnumSet sizes = EnumSet.allOf(Size.class); 

Hier geeft Size.class de grootte-opsomming aan die we hebben gemaakt.

2. NoneOf (Size) gebruiken

De noneOf()methode maakt een lege enumset aan. Bijvoorbeeld,

 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 sizes = EnumSet.noneOf(Size.class); System.out.println("Empty EnumSet: " + sizes); ) ) 

Uitvoer

 Lege EnumSet: () 

Hier hebben we een lege opsomming gemaakt met de naam maten.

Opmerking : we kunnen alleen elementen van het enum-type Grootte invoegen in het bovenstaande programma. Het is omdat we onze lege enum-set hebben gemaakt met Size enum.

3. Met behulp van de bereikmethode (e1, e2)

De range()methode maakt een enum-set met alle waarden van een enum tussen e1 en e2 inclusief beide waarden. Bijvoorbeeld,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using range() EnumSet sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); ) ) 

Uitvoer

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. Gebruik van () methode

De of()methode maakt een opsommingsset met de opgegeven elementen. Bijvoorbeeld,

 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 sizes1 = EnumSet.of(Size.MEDIUM); System.out.println("EnumSet1: " + sizes1); EnumSet sizes2 = EnumSet.of(Size.SMALL, Size.LARGE); System.out.println("EnumSet2: " + sizes2); ) ) 

Uitvoer

 EnumSet1: (MEDIUM) EnumSet2: (SMALL, LARGE) 

Methoden van EnumSet

De EnumSetklasse biedt methoden waarmee we verschillende elementen op de enum-set kunnen uitvoeren.

Voeg elementen toe aan EnumSet

  • add() - voegt opgegeven enum-waarden in de enum-set in
  • addAll() voegt alle elementen van de opgegeven collectie in de set in

Bijvoorbeeld,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes1 = EnumSet.allOf(Size.class); // Creating an EnumSet using noneOf() EnumSet 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); ) ) 

Uitvoer

 EnumSet met add (): (MEDIUM) EnumSet met addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

In het bovenstaande voorbeeld hebben we de addAll()methode gebruikt om alle elementen van een enum-set size1 in een enum-set size2 in te voegen.

Het is ook mogelijk om elementen uit andere collecties zoals voegen ArrayList, LinkedListetc. een opsomming ingesteld met addAll(). Alle verzamelingen moeten echter van hetzelfde opsommingstype zijn.

Toegang tot EnumSet Elements

Om toegang te krijgen tot elementen van een enum-set, kunnen we de iterator()methode gebruiken. Om deze methode te gebruiken, moeten we het java.util.Iteratorpakket importeren . Bijvoorbeeld,

 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 sizes = EnumSet.allOf(Size.class); Iterator iterate = sizes.iterator(); System.out.print("EnumSet: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Uitvoer

 EnumSet: KLEIN, MEDIUM, LARGE, EXTRALARGE, 

Opmerking :

  • hasNext()geeft terug trueals er een volgend element in de enum-set is
  • next() geeft het volgende element in de enum-set terug

Verwijder EnumSet Elements

  • remove() - verwijdert het opgegeven element uit de enum-set
  • removeAll() - verwijdert alle elementen uit de opsommingsset

Bijvoorbeeld,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating EnumSet using allOf() EnumSet 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); ) ) 

Uitvoer

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) Is MEDIUM verwijderd? true Zijn alle elementen verwijderd? waar

Andere methodes

Methode Omschrijving
copyOf() Creates a copy of the EnumSet
contains() Searches the EnumSet for the specified element and returns a boolean result
isEmpty() Checks if the EnumSet is empty
size() Returns the size of the EnumSet
clear() Removes all the elements from the EnumSet

Clonable and Serializable Interfaces

The EnumSet class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumSet class to make a copy of instances of the class.

Serializable Interface

Whenever Java objects need to be transmitted over a network, objects need to be converted into bits or bytes. This is because Java objects cannot be transmitted over the network.

The Serializable interface allows classes to be serialized. This means objects of the classes implementing Serializable can be converted into bits or bytes.

Why EnumSet?

Het EnumSetbiedt een efficiënte manier om opsommingswaarden op te slaan dan andere setimplementaties (zoals HashSet, TreeSet).

Een enum-set slaat alleen enum-waarden op van een specifieke enum. Daarom kent de JVM al alle mogelijke waarden van de set.

Dit is de reden waarom enumsets intern worden geïmplementeerd als een reeks bits. Bits specificeert of elementen aanwezig zijn in de opsommingsset of niet.

Het bit van een overeenkomstig element wordt aangezet als dat element aanwezig is in de set.

Interessante artikelen...