En este tutorial, aprenderemos sobre la clase Java EnumSet y sus diversos métodos con la ayuda de ejemplos.
La EnumSet
clase del marco de colecciones de Java proporciona una implementación de conjunto de elementos de una sola enumeración.
Antes de aprender sobre EnumSet, asegúrese de conocer Java Enums.
Implementa la interfaz Set.
Creando EnumSet
Para crear un conjunto de enumeraciones, java.util.EnumSet
primero debemos importar el paquete.
A diferencia de otras implementaciones de conjuntos, el conjunto de enumeración no tiene constructores públicos. Debemos usar los métodos predefinidos para crear un conjunto de enumeraciones.
1. Usando allOf (Size)
El allof()
método crea un conjunto de enumeración que contiene todos los valores del tamaño de tipo de enumeración especificado. Por ejemplo,
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); ) )
Salida
EnumSet: (PEQUEÑO, MEDIO, GRANDE, EXTRALARGO)
Note la declaración,
EnumSet sizes = EnumSet.allOf(Size.class);
Aquí, Size.class denota la enumeración Size que hemos creado.
2. Usando noneOf (Size)
El noneOf()
método crea un conjunto de enumeraciones vacío. Por ejemplo,
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); ) )
Salida
EnumSet vacío: ()
Aquí, hemos creado una enumeración vacía llamada tamaños.
Nota : Solo podemos insertar elementos del tipo de enumeración Size en el programa anterior. Es porque creamos nuestro conjunto de enumeración vacío usando Size enum.
3. Uso del método de rango (e1, e2)
El range()
método crea un conjunto de enumeración que contiene todos los valores de una enumeración entre e1 y e2, incluidos ambos valores. Por ejemplo,
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); ) )
Salida
EnumSet: (MEDIO, GRANDE, EXTRALARGO)
4. Uso del método ()
El of()
método crea un conjunto de enumeración que contiene los elementos especificados. Por ejemplo,
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); ) )
Salida
EnumSet1: (MEDIUM) EnumSet2: (PEQUEÑO, GRANDE)
Métodos de EnumSet
La EnumSet
clase proporciona métodos que nos permiten realizar varios elementos en el conjunto de enumeración.
Insertar elementos en EnumSet
add()
- inserta valores de enumeración especificados en el conjunto de enumeraciónaddAll()
inserta todos los elementos de la colección especificada en el conjunto
Por ejemplo,
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); ) )
Salida
EnumSet usando add (): (MEDIUM) EnumSet usando addAll (): (PEQUEÑO, MEDIO, GRANDE, EXTRALARGO)
En el ejemplo anterior, hemos utilizado el addAll()
método para insertar todos los elementos de un conjunto de enumeración tamaños1 en un conjunto de enumeración tamaños2.
También es posible insertar elementos de otras colecciones como ArrayList
, LinkedList
, etc. a un conjunto de enumeración usando addAll()
. Sin embargo, todas las colecciones deben ser del mismo tipo de enumeración.
Acceder a los elementos de EnumSet
Para acceder a elementos de un conjunto de enumeración, podemos usar el iterator()
método. Para utilizar este método, debemos importar el java.util.Iterator
paquete. Por ejemplo,
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(", "); ) ) )
Salida
EnumSet: PEQUEÑO, MEDIO, GRANDE, EXTRALARGO,
Nota :
hasNext()
devuelvetrue
si hay un elemento siguiente en el conjunto de enumeraciónnext()
devuelve el siguiente elemento en el conjunto de enumeración
Eliminar elementos EnumSet
remove()
- elimina el elemento especificado del conjunto de enumeraciónremoveAll()
- elimina todos los elementos del conjunto de enumeración
Por ejemplo,
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); ) )
Salida
EnumSet: (PEQUEÑO, MEDIO, GRANDE, EXTRALARGO) ¿Se ha eliminado MEDIO? verdadero ¿Se eliminan todos los elementos? cierto
Otros metodos
Método | Descripción |
---|---|
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?
El EnumSet
proporciona una manera eficiente de almacenar los valores de enumeración que otras implementaciones de Programación (como HashSet
, TreeSet
).
Un conjunto de enumeración solo almacena valores de enumeración de una enumeración específica. Por tanto, la JVM ya conoce todos los valores posibles del conjunto.
Esta es la razón por la que los conjuntos de enumeración se implementan internamente como una secuencia de bits. Bits especifica si los elementos están presentes en el conjunto de enumeración o no.
El bit de un elemento correspondiente se activa si ese elemento está presente en el conjunto.