Java EnumSet
Conjunto de enumeración de Java
En este tutorial, aprenderemos sobre la clase Java EnumSet y sus diversos métodos con la ayuda de ejemplos.
El EnumSet
La clase del marco de colecciones de Java proporciona una implementación establecida de elementos de una sola enumeración.
Antes de aprender sobre EnumSet, asegúrese de saber sobre Java Enums.
Implementa la interfaz Set.
Creando EnumSet
Para crear un conjunto de enumeración, debemos importar el java.util.EnumSet
paquete primero.
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 enumeración.
1. Usando allOf(Tamaño)
El allof()
El método crea un conjunto de enumeración que contiene todos los valores del tipo de enumeración especificado Size . 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<Size> sizes = EnumSet.allOf(Size.class);
System.out.println("EnumSet: " + sizes);
}
}
Salida
EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Note la declaración,
EnumSet<Size> sizes = EnumSet.allOf(Size.class);
Aquí, Tamaño.clase denota el Tamaño enumeración que hemos creado.
2. Usando noneOf(Tamaño)
El noneOf()
El método crea un conjunto de enumeración 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<Size> sizes = EnumSet.noneOf(Size.class);
System.out.println("Empty EnumSet: " + sizes);
}
}
Salida
Empty EnumSet : []
Aquí, hemos creado una enumeración vacía llamada tamaños .
Nota :Solo podemos insertar elementos de tipo enum Size en el programa anterior. Es porque creamos nuestro conjunto de enumeración vacío usando Size enumeración.
3. Usando el método range(e1, e2)
El range()
El método crea un conjunto de enumeración que contiene todos los valores de una enumeración entre e1 y e2 incluyendo 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<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);
System.out.println("EnumSet: " + sizes);
}
}
Salida
EnumSet: [MEDIUM, LARGE, EXTRALARGE]
4. Uso del método of()
El of()
El 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<Size> sizes1 = EnumSet.of(Size.MEDIUM);
System.out.println("EnumSet1: " + sizes1);
EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
System.out.println("EnumSet2: " + sizes2);
}
}
Salida
EnumSet1: [MEDIUM] EnumSet2: [SMALL, LARGE]
Métodos de EnumSet
El EnumSet
La 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<Size> sizes1 = EnumSet.allOf(Size.class);
// Creating an EnumSet using noneOf()
EnumSet<Size> 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 using add(): [MEDIUM] EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]
En el ejemplo anterior, hemos utilizado el addAll()
método para insertar todos los elementos de un conjunto de enumeración sizes1 a un conjunto de enumeración sizes2 .
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.
Acceso a elementos de EnumSet
Para acceder a los elementos de un conjunto de enumeración, podemos usar el iterator()
método. Para usar 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<Size> sizes = EnumSet.allOf(Size.class);
Iterator<Size> iterate = sizes.iterator();
System.out.print("EnumSet: ");
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Salida
EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,
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 de 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<Size> 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: [SMALL, MEDIUM, LARGE, EXTRALARGE] Is MEDIUM removed? true Are all elements removed? true
Otros métodos
Método | Descripción |
---|---|
copyOf() | Crea una copia del EnumSet |
contains() | Busca el EnumSet para el elemento especificado y devuelve un resultado booleano |
isEmpty() | Comprueba si EnumSet está vacío |
size() | Devuelve el tamaño del EnumSet |
clear() | Elimina todos los elementos del EnumSet |
Interfaces clonables y serializables
El EnumSet
la clase también implementa Cloneable
y Serializable
interfaces.
Interfaz clonable
Permite el EnumSet
class para hacer una copia de las instancias de la clase.
Interfaz serializable
Cada vez que los objetos de Java deben transmitirse a través de una red, los objetos deben convertirse en bits o bytes. Esto se debe a que los objetos Java no se pueden transmitir a través de la red.
El Serializable
La interfaz permite serializar las clases. Esto significa objetos de las clases que implementan Serializable
se puede convertir en bits o bytes.
¿Por qué EnumSet?
El EnumSet
proporciona una forma eficiente de almacenar valores de enumeración que otras implementaciones de conjuntos (como HashSet
, TreeSet
).
Un conjunto de enumeración solo almacena valores de enumeración de una enumeración específica. Por lo tanto, la JVM ya conoce todos los valores posibles del conjunto.
Esta es la razón por la cual 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.
Java