In deze tutorial zullen we met behulp van voorbeelden leren over de Java EnumSet-klasse en de verschillende methoden ervan.
De EnumSet
klasse 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.EnumSet
pakket 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 EnumSet
klasse 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 inaddAll()
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
, LinkedList
etc. 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.Iterator
pakket 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 terugtrue
als er een volgend element in de enum-set isnext()
geeft het volgende element in de enum-set terug
Verwijder EnumSet Elements
remove()
- verwijdert het opgegeven element uit de enum-setremoveAll()
- 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 EnumSet
biedt 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.