Java EnumSet
Java EnumSet
In deze zelfstudie leren we over de Java EnumSet-klasse en zijn verschillende methoden met behulp van voorbeelden.
De EnumSet
klasse van het Java-verzamelingsraamwerk biedt een set implementatie van elementen van een enkele opsomming.
Voordat u meer te weten komt over EnumSet, moet u eerst kennis hebben van Java Enums.
Het implementeert de Set-interface.
EnumSet maken
Om een enum-set te maken, moeten we de java.util.EnumSet
. importeren pakket eerst.
In tegenstelling tot andere set-implementaties heeft de enum-set geen openbare constructors. We moeten de vooraf gedefinieerde methoden gebruiken om een enum-set te maken.
1. AllOf(Size) gebruiken
De allof()
methode maakt een enum-set die alle waarden van het opgegeven enum-type bevat Size . 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<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
}
}
Uitvoer
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Let op de verklaring,
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Hier, Size.class geeft de Grootte . aan opsomming die we hebben gemaakt.
2. Geen van (grootte) gebruiken
De noneOf()
methode maakt een lege enum-set 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<Size> sizes = EnumSet.noneOf(Size.class);
System.out.println("Empty EnumSet: " + sizes);
}
}
Uitvoer
Empty EnumSet : []
Hier hebben we een lege opsomming gemaakt met de naam sizes .
Opmerking :We kunnen alleen elementen van het enum-type Size . invoegen in bovenstaand programma. Het is omdat we onze lege enum-set hebben gemaakt met behulp van Size opsomming.
3. Methode bereik (e1, e2) gebruiken
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<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);
System.out.println("EnumSet: " + sizes);
}
}
Uitvoer
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
4. Methode van() gebruiken
De of()
methode maakt een enum-set 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<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);
}
}
Uitvoer
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
Methoden van EnumSet
De EnumSet
class biedt methoden waarmee we verschillende elementen op de enum-set kunnen uitvoeren.
Elementen invoegen in EnumSet
add()
- voegt gespecificeerde enum-waarden toe aan de enum-setaddAll()
voegt alle elementen van de opgegeven verzameling toe aan de set
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<Size> sizes1 = EnumSet.allOf(Size.class);
// Creating an EnumSet using noneOf()
EnumSet<Size> 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 using add(): [MEDIUM] EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
In het bovenstaande voorbeeld hebben we de addAll()
. gebruikt methode om alle elementen van een opsomming in te voegen sizes1 naar een opsomming van sizes2 .
Het is ook mogelijk om elementen uit andere collecties in te voegen, zoals ArrayList
, LinkedList
, etc. naar een enum set met behulp van addAll()
. Alle verzamelingen moeten echter van hetzelfde enum-type zijn.
Toegang tot EnumSet-elementen
Om toegang te krijgen tot elementen van een enum-set, kunnen we de iterator()
. gebruiken methode. Om deze methode te gebruiken, moeten we de java.util.Iterator
. importeren pakket. 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<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(", ");
}
}
}
Uitvoer
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Opmerking :
hasNext()
retourneerttrue
als er een volgend element in de enum-set isnext()
geeft het volgende element in de enum-set terug
EnumSet-elementen verwijderen
remove()
- verwijdert het gespecificeerde element uit de enum setremoveAll()
- verwijdert alle elementen uit de enum set
Bijvoorbeeld,
import java.util.EnumSet;
class Main {
enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}
public static void main(String[] args) {
// Creating EnumSet using allOf()
EnumSet<Size> 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 removed? true Are all elements removed? true
Andere methoden
Methode | Beschrijving |
---|---|
copyOf() | Maakt een kopie van de EnumSet |
contains() | Zoekt de EnumSet voor het opgegeven element en geeft een booleaans resultaat |
isEmpty() | Controleert of de EnumSet is leeg |
size() | Retourneert de grootte van de EnumSet |
clear() | Verwijdert alle elementen uit de EnumSet |
Klonbare en serialiseerbare interfaces
De EnumSet
klasse implementeert ook Cloneable
en Serializable
interfaces.
Kloonbare interface
Het staat de EnumSet
class om een kopie te maken van instanties van de class.
Serializeerbare interface
Wanneer Java-objecten via een netwerk moeten worden verzonden, moeten objecten worden omgezet in bits of bytes. Dit komt omdat Java-objecten niet via het netwerk kunnen worden verzonden.
De Serializable
interface maakt het mogelijk klassen te serialiseren. Dit betekent objecten van de klassen die Serializable
. implementeren kan worden omgezet in bits of bytes.
Waarom EnumSet?
De EnumSet
biedt een efficiënte manier om enum-waarden op te slaan dan andere set-implementaties (zoals HashSet
, TreeSet
).
Een enum-set slaat alleen enum-waarden op van een specifieke enum. De JVM kent dus al alle mogelijke waarden van de set.
Dit is de reden waarom enum-sets intern worden geïmplementeerd als een reeks bits. Bits specificeert of elementen aanwezig zijn in de enum set of niet.
De bit van een corresponderend element wordt aangezet als dat element in de set aanwezig is.
Java