Java EnumSet

I denne vejledning lærer vi om Java EnumSet-klassen og dens forskellige metoder ved hjælp af eksempler.

Den EnumSetklasse 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.EnumSetpakken.

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 EnumSetklasse 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ættet
  • addAll() 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, LinkedListetc. 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.Iteratorpakken. 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, truehvis der er et næste element i enumssættet
  • next() returnerer det næste element i enumssættet

Fjern EnumSet Elements

  • remove() - fjerner det angivne element fra enumssættet
  • removeAll() - 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 EnumSetgiver 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.

Interessante artikler...