Java EnumSet

I denne opplæringen vil vi lære om Java EnumSet-klassen og dens forskjellige metoder ved hjelp av eksempler.

Den EnumSetklassen av Java samlinger rammeverket gir et sett implementering av elementene i en enkelt enum.

Før du lærer om EnumSet, må du huske å vite om Java Enums.

Den implementerer Set-grensesnittet.

Opprette EnumSet

For å lage et enum-sett, må vi importere java.util.EnumSetpakken først.

I motsetning til andre settimplementasjoner har enum-settet ikke offentlige konstruktører. Vi må bruke de forhåndsdefinerte metodene for å lage et enum-sett.

1. Bruke allOf (størrelse)

Den allof()Prosessen skaper en enum sett som inneholder alle verdier av den angitte enum tekststø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); ) ) 

Produksjon

 EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Legg merke til uttalelsen,

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

Her betegner Size.class størrelsen enum vi har opprettet.

2. Bruke noneOf (størrelse)

Den noneOf()metode fører til en tom enum sett. 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); ) ) 

Produksjon

 Tom EnumSet: () 

Her har vi opprettet et tomt navn med størrelser.

Merk : Vi kan bare sette inn elementer av enum-type størrelse i programmet ovenfor. Det er fordi vi opprettet vårt tomme enumsett med Size enum.

3. Bruke rekkevidde (e1, e2) Metode

Den range()Prosessen skaper en enum sett som inneholder alle verdiene for et enum mellom e1 og e2 inkludert begge verdier. 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); ) ) 

Produksjon

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. Bruk av () -metoden

Den of()Prosessen skaper en enum sett inneholdende de angitte elementene. 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); ) ) 

Produksjon

 EnumSet1: (MEDIUM) EnumSet2: (LITEN, STOR) 

Metoder for EnumSet

Den EnumSetklassen inneholder metoder som tillater oss å utføre ulike elementer på enum settet.

Sett inn elementer i EnumSet

  • add() - setter inn spesifiserte enumverdier til enum-settet
  • addAll() setter inn alle elementene i den angitte samlingen i settet

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); ) ) 

Produksjon

 EnumSet ved hjelp av add (): (MEDIUM) EnumSet ved hjelp av addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

I eksemplet ovenfor har vi brukt addAll()metoden for å sette inn alle elementene i enum-settstørrelser1 til enum-settstørrelser2.

Det er også mulig å sette inn elementer fra andre samlinger som ArrayList, LinkedListetc. til en enum apparatet ved hjelp addAll(). Imidlertid bør alle samlinger være av samme type.

Få tilgang til EnumSet Elements

For å få tilgang til elementer i et enum-sett, kan vi bruke iterator()metoden. For å kunne bruke denne metoden, må 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(", "); ) ) ) 

Produksjon

 EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Merk :

  • hasNext()returnerer truehvis det er et neste element i enum-settet
  • next() returnerer neste element i enum-settet

Fjern EnumSet Elements

  • remove() - fjerner det angitte elementet fra enum-settet
  • removeAll() - fjerner alle elementene fra enum-settet

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); ) ) 

Produksjon

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) Er MEDIUM fjernet? true Er alle elementene fjernet? ekte

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 EnumSetgir en effektiv måte å lagre enumverdier på enn andre sett implementeringer (som HashSet, TreeSet).

Et enum-sett lagrer bare enumverdier for et bestemt enum. Derfor kjenner JVM allerede alle mulige verdier for settet.

Dette er grunnen til at enum-sett er implementert internt som en sekvens av biter. Bits spesifiserer om elementer er tilstede i enum-settet eller ikke.

Biten til et tilsvarende element er slått på hvis elementet er tilstede i settet.

Interessante artikler...