I denne vejledning lærer vi om Java EnumSet-klassen og dens forskellige metoder ved hjælp af eksempler.
Den EnumSet
klasse af Java kollektioner rammer giver et sæt implementering af elementer i en enkelt enum.
Før du lærer om EnumSet, skal du sørge for at vide om Java Enums.
Det implementerer Set-grænsefladen.
Oprettelse af EnumSet
For at oprette et enumssæt skal vi først importere java.util.EnumSet
pakken.
I modsætning til andre sætimplementeringer har enumssættet ikke offentlige konstruktører. Vi skal bruge de foruddefinerede metoder til at oprette et enum-sæt.
1. Brug af allOf (størrelse)
Den allof()
metode skaber en enum sæt, der indeholder alle de værdier af den angivne enum typen Størrelse. For eksempel,
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); ) )
Produktion
EnumSet: (LITEN, MEDIUM, STOR, EKSTRA)
Bemærk erklæringen,
EnumSet sizes = EnumSet.allOf(Size.class);
Her angiver Size.class størrelsen enum, som vi har oprettet.
2. Brug af noneOf (størrelse)
Den noneOf()
metode skaber en tom enum sæt. For eksempel,
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); ) )
Produktion
Tom EnumSet: ()
Her har vi oprettet et tomt navn med størrelser.
Bemærk : Vi kan kun indsætte elementer af enum-type størrelse i ovenstående program. Det er fordi vi oprettede vores tomme enum-sæt ved hjælp af Size enum.
3. Brug af rækkevidde (e1, e2) Metode
Den range()
metode skaber en enum sæt indeholder alle værdier af en enum mellem e1 og e2 herunder både værdier. For eksempel,
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); ) )
Produktion
EnumSet: (MEDIUM, LARGE, EXTRALARGE)
4. Brug af () -metoden
Den of()
metode skaber en enum sæt indeholdende de angivne elementer. For eksempel,
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); ) )
Produktion
EnumSet1: (MEDIUM) EnumSet2: (SMALL, LARGE)
Metoder til EnumSet
Den EnumSet
klasse indeholder metoder, der tillader os at udføre forskellige elementer på enum sæt.
Indsæt elementer i EnumSet
add()
- indsætter specificerede enumværdier til enumssættetaddAll()
indsætter alle elementerne i den angivne samling i sættet
For eksempel,
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); ) )
Produktion
EnumSet ved hjælp af add (): (MEDIUM) EnumSet ved hjælp af addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE)
I ovenstående eksempel har vi brugt addAll()
metoden til at indsætte alle elementerne i en enum sæt størrelser1 til en enum sæt størrelser2.
Det er også muligt at indsætte elementer fra andre samlinger, såsom ArrayList
, LinkedList
etc. til en enum indstillet med addAll()
. Alle samlinger skal dog være af samme type.
Adgang til EnumSet Elements
For at få adgang til elementer i et enumsæt kan vi bruge iterator()
metoden. For at kunne bruge denne metode skal vi importere java.util.Iterator
pakken. For eksempel,
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(", "); ) ) )
Produktion
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
Bemærk :
hasNext()
vender tilbage,true
hvis der er et næste element i enumssættetnext()
returnerer det næste element i enumssættet
Fjern EnumSet Elements
remove()
- fjerner det angivne element fra enumssættetremoveAll()
- fjerner alle elementerne fra enum-sættet
For eksempel,
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); ) )
Produktion
EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) Er MEDIUM fjernet? sand Er alle elementer fjernet? sand
Andre metoder
Metode | Beskrivelse |
---|---|
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?
Dette EnumSet
giver en effektiv måde at gemme enumværdier på end andre sæt implementeringer (som HashSet
, TreeSet
).
Et enum-sæt gemmer kun enumværdier for et specifikt enum. Derfor kender JVM allerede alle de mulige værdier i sættet.
Dette er grunden til, at enumsæt internt implementeres som en sekvens af bits. Bits specificerer, om der findes elementer i enumssættet eller ej.
Bit af et tilsvarende element er tændt, hvis elementet er til stede i sættet.