Java EnumSet

En este tutorial, aprenderemos sobre la clase Java EnumSet y sus diversos métodos con la ayuda de ejemplos.

La EnumSetclase 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.EnumSetprimero 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 EnumSetclase 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ón
  • addAll() 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.Iteratorpaquete. 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()devuelve truesi hay un elemento siguiente en el conjunto de enumeración
  • next() devuelve el siguiente elemento en el conjunto de enumeración

Eliminar elementos EnumSet

  • remove() - elimina el elemento especificado del conjunto de enumeración
  • removeAll() - 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 EnumSetproporciona 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.

Articulos interesantes...