In questo tutorial, impareremo a conoscere la classe Java EnumSet ei suoi vari metodi con l'aiuto di esempi.
La EnumSet
classe 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.EnumSet
prima 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 EnumSet
classe fornisce metodi che ci consentono di eseguire vari elementi sull'insieme enum.
Inserisci elementi in EnumSet
add()
- inserisce i valori enum specificati nel set enumaddAll()
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
, LinkedList
eccetera 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.Iterator
pacchetto. 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()
restituiscetrue
se è presente un elemento successivo nell'insieme enumnext()
restituisce l'elemento successivo nel set enum
Rimuovi elementi EnumSet
remove()
- rimuove l'elemento specificato dal set enumremoveAll()
- 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 EnumSet
fornisce 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.