Java EnumSet

In questo tutorial, impareremo a conoscere la classe Java EnumSet ei suoi vari metodi con l'aiuto di esempi.

La EnumSetclasse del framework delle collezioni Java fornisce una serie di implementazioni di elementi di una singola enumerazione.

Prima di conoscere EnumSet, assicurati di conoscere Java Enums.

Implementa l'interfaccia Set.

Creazione di EnumSet

Per creare un set enum, dobbiamo java.util.EnumSetprima importare il pacchetto.

A differenza di altre implementazioni di set, il set enum non ha costruttori pubblici. Dobbiamo usare i metodi predefiniti per creare un set enum.

1. Utilizzo di allOf (Size)

Il allof()metodo crea un set di enumerazioni che contiene tutti i valori del tipo di enumerazione specificato Size. Per esempio,

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

Produzione

 EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Notare la dichiarazione,

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

Qui, Size.class indica l'enumerazione Size che abbiamo creato.

2. Utilizzo di noneOf (Size)

Il noneOf()metodo crea un set di enumerazioni vuoto. Per esempio,

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

Produzione

 EnumSet vuoto: () 

Qui, abbiamo creato un'enumerazione vuota denominata size.

Nota : possiamo inserire solo elementi di tipo enum Size nel programma sopra. È perché abbiamo creato il nostro set enum vuoto usando Size enum.

3. Utilizzo del metodo range (e1, e2)

Il range()metodo crea un insieme di enumerazioni contenente tutti i valori di un'enumerazione tra e1 ed e2, inclusi entrambi i valori. Per esempio,

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

Produzione

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. Utilizzo del metodo ()

Il of()metodo crea un set enum contenente gli elementi specificati. Per esempio,

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

Produzione

 EnumSet1: (MEDIUM) EnumSet2: (SMALL, LARGE) 

Metodi di EnumSet

La EnumSetclasse fornisce metodi che ci consentono di eseguire vari elementi sull'insieme enum.

Inserisci elementi in EnumSet

  • add() - inserisce i valori enum specificati nel set enum
  • addAll() inserisce nel set tutti gli elementi della raccolta specificata

Per esempio,

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

Produzione

 EnumSet utilizzando add (): (MEDIUM) EnumSet utilizzando addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Nell'esempio precedente, abbiamo utilizzato il addAll()metodo per inserire tutti gli elementi di un enum set size1 in un enum set size2.

È anche possibile inserire elementi di altre collezioni come ArrayList, LinkedListeccetera in serie enum utilizzando addAll(). Tuttavia, tutte le raccolte dovrebbero essere dello stesso tipo enum.

Accedi a EnumSet Elements

Per accedere agli elementi di un set enum, possiamo usare il iterator()metodo. Per utilizzare questo metodo, dobbiamo importare il java.util.Iteratorpacchetto. Per esempio,

 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(", "); ) ) ) 

Produzione

 EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Nota :

  • hasNext()restituisce truese è presente un elemento successivo nell'insieme enum
  • next() restituisce l'elemento successivo nel set enum

Rimuovi elementi EnumSet

  • remove() - rimuove l'elemento specificato dal set enum
  • removeAll() - rimuove tutti gli elementi dal set enum

Per esempio,

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

Produzione

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) MEDIUM è stato rimosso? true Sono stati rimossi tutti gli elementi? vero

Altri metodi

Metodo Descrizione
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?

Il EnumSetfornisce un modo efficace per memorizzare valori enum di altre implementazioni (ad esempio come HashSet, TreeSet).

Un set enum memorizza solo i valori enum di un enum specifico. Quindi, la JVM conosce già tutti i possibili valori dell'insieme.

Questo è il motivo per cui i set enum sono implementati internamente come una sequenza di bit. Bits specifica se gli elementi sono presenti nel set di enumerazioni o meno.

Il bit di un elemento corrispondente viene attivato se quell'elemento è presente nel set.

Articoli interessanti...