El EnumSet es una de las implementaciones especializadas de la interfaz Set para usar con el tipo de enumeración . Algunas características importantes de EnumSet son las siguientes:
- Extiende la clase AbstractSet e implementa Set Interface en Java.
- La clase EnumSet es miembro de Java Collections Framework y no está sincronizada.
- Es una implementación de conjunto de alto rendimiento, mucho más rápida que HashSet .
- Todos los elementos de un EnumSet deben provenir de un solo tipo de enumeración que se especifica cuando el conjunto se crea de forma explícita o implícita.
- No permite objetos nulos y lanza NullPointerException si lo hacemos.
- Utiliza un iterador a prueba de fallas , por lo que no generará ConcurrentModificationException si la colección se modifica durante la iteración.
La jerarquía de EnumSet es la siguiente:
java.lang.Object ↳ java.util.AbstractCollection<E> ↳ java.util.AbstractSet<E> ↳ java.util.EnumSet<E>
Aquí, E es el tipo de elementos almacenados.
Sintaxis: Declaración
public abstract class EnumSet<E extends Enum<E>>
Aquí, E especifica los elementos. E debe extender Enum, lo que impone el requisito de que los elementos deben ser del tipo de enumeración especificado .
Beneficios de usar EnumSet
- Debido a su implementación usando RegularEnumSet y JumboEnumSet, todos los métodos en un EnumSet se implementan usando operaciones aritméticas bit a bit.
- EnumSet es más rápido que HashSet porque no necesitamos calcular ningún código hash para encontrar el depósito correcto.
- Los cálculos se ejecutan en tiempo constante y el espacio requerido es muy pequeño.
Métodos de EnumSet
Método |
Acción realizada |
---|---|
allOf(Clase<E> tipo de elemento) | Crea un conjunto de enumeración que contiene todos los elementos del tipo de elemento especificado. |
clon() | Devuelve una copia de este conjunto. |
complementoDe(EnumSet<E> s) | Crea un conjunto de enumeración con el mismo tipo de elemento que el conjunto de enumeración especificado, que inicialmente contiene todos los elementos de este tipo que no están contenidos en el conjunto especificado. |
copyOf(Colección<E> c) | Crea un conjunto de enumeración inicializado a partir de la colección especificada. |
copyOf(EnumSet<E> s) | Crea un conjunto de enumeración con el mismo tipo de elemento que el conjunto de enumeración especificado, que inicialmente contiene los mismos elementos (si los hay). |
noneOf(Clase<E> tipoelemento) | Crea un conjunto de enumeración vacío con el tipo de elemento especificado. |
de (E e) | Crea un conjunto de enumeración que inicialmente contiene el elemento especificado. |
de (E e1, E e2) | Crea un conjunto de enumeración que inicialmente contiene los elementos especificados. |
de(E primero, E… resto) | Crea un conjunto de enumeración que inicialmente contiene los elementos especificados. |
de (E e1, E e2, E e3) | Crea un conjunto de enumeración que inicialmente contiene los elementos especificados. |
de (E e1, E e2, E e3, E e4) | Crea un conjunto de enumeración que inicialmente contiene los elementos especificados. |
de (E e1, E e2, E e3, E e4, E e5) | Crea un conjunto de enumeración que inicialmente contiene los elementos especificados. |
rango(E desde, E hasta) | Crea un conjunto de enumeración que inicialmente contiene todos los elementos en el rango definido por los dos puntos finales especificados. |
Implementación:
Java
// Java Program to Illustrate Working // of EnumSet and its functions // Importing required classes import java.util.EnumSet; // Enum enum Gfg { CODE, LEARN, CONTRIBUTE, QUIZ, MCQ }; // Main class // EnumSetExample public class GFG { // Main driver method public static void main(String[] args) { // Creating a set EnumSet<Gfg> set1, set2, set3, set4; // Adding elements set1 = EnumSet.of(Gfg.QUIZ, Gfg.CONTRIBUTE, Gfg.LEARN, Gfg.CODE); set2 = EnumSet.complementOf(set1); set3 = EnumSet.allOf(Gfg.class); set4 = EnumSet.range(Gfg.CODE, Gfg.CONTRIBUTE); // Printing corresponding elements in Sets System.out.println("Set 1: " + set1); System.out.println("Set 2: " + set2); System.out.println("Set 3: " + set3); System.out.println("Set 4: " + set4); } }
Set 1: [CODE, LEARN, CONTRIBUTE, QUIZ] Set 2: [MCQ] Set 3: [CODE, LEARN, CONTRIBUTE, QUIZ, MCQ] Set 4: [CODE, LEARN, CONTRIBUTE]
Operación 1: Creación de un objeto EnumSet
Dado que EnumSet es una clase abstracta, no podemos crear directamente una instancia de ella. Tiene muchos métodos de fábrica estáticos que nos permiten crear una instancia. Hay dos implementaciones diferentes de EnumSet proporcionadas por JDK
- RegularEnumSet
- JumboEnumSet
Nota: estos son paquetes privados y están respaldados por un vector de bits.
RegularEnumSet usa un solo objeto largo para almacenar elementos del EnumSet. Cada bit del elemento largo representa un valor Enum. Dado que el tamaño del long es de 64 bits, puede almacenar hasta 64 elementos diferentes.
JumboEnumSet utiliza una array de elementos largos para almacenar elementos de EnumSet. La única diferencia con RegularEnumSet es que JumboEnumSet utiliza una array larga para almacenar el vector de bits, lo que permite más de 64 valores.
Los métodos de fábrica crean una instancia basada en la cantidad de elementos, EnumSet no proporciona ningún constructor público, las instancias se crean utilizando métodos de fábrica estáticos como se indica a continuación:
Ilustración:
if (universe.length <= 64) return new RegularEnumSet<>(elementType, universe); else return new JumboEnumSet<>(elementType, universe);
Ejemplo:
Java
// Java Program to illustrate Creation an EnumSet // Importing required classes import java.util.*; // Main class // CreateEnumSet class GFG { // Enum enum Game { CRICKET, HOCKEY, TENNIS } // Main driver method public static void main(String[] args) { // Creating an EnumSet using allOf() EnumSet<Game> games = EnumSet.allOf(Game.class); // Printing EnumSet elements to the console System.out.println("EnumSet: " + games); } }
EnumSet: [CRICKET, HOCKEY, TENNIS]
Operación 2: Adición de elementos
Podemos agregar elementos a un EnumSet usando los métodos add() y addAll().
Ejemplo:
Java
// Java program to illustrate Addition of Elements // to an EnumSet // Importing required classes import java.util.EnumSet; // Main class class AddElementsToEnumSet { // Enum enum Game { CRICKET, HOCKEY, TENNIS } // Main driver method public static void main(String[] args) { // Creating an EnumSet // using allOf() EnumSet<Game> games1 = EnumSet.allOf(Game.class); // Creating an EnumSet // using noneOf() EnumSet<Game> games2 = EnumSet.noneOf(Game.class); // Using add() method games2.add(Game.HOCKEY); // Printing the elements to the console System.out.println("EnumSet Using add(): " + games2); // Using addAll() method games2.addAll(games1); // Printing the elements to the console System.out.println("EnumSet Using addAll(): " + games2); } }
EnumSet Using add(): [HOCKEY] EnumSet Using addAll(): [CRICKET, HOCKEY, TENNIS]
Operación 3: Acceso a Elementos
Podemos acceder a los elementos de EnumSet usando el método iterator() .
Ejemplo:
Java
// Java program to Access Elements of EnumSet // Importing required classes import java.util.EnumSet; import java.util.Iterator; // Main class // AccessingElementsOfEnumSet class GFG { // Enum enum Game { CRICKET, HOCKEY, TENNIS } // MAin driver method public static void main(String[] args) { // Creating an EnumSet using allOf() EnumSet<Game> games = EnumSet.allOf(Game.class); // Creating an iterator on games Iterator<Game> iterate = games.iterator(); // Display message System.out.print("EnumSet: "); while (iterate.hasNext()) { // Iterating and printing elements to // the console using next() method System.out.print(iterate.next()); System.out.print(", "); } } }
EnumSet: CRICKET, HOCKEY, TENNIS,
Operación 4: Eliminación de elementos
Podemos eliminar los elementos usando los métodos remove() y removeAll().
Ejemplo:
Java
// Java program to Remove Elements // from a EnumSet // Importing required classes import java.util.EnumSet; // Main class // RemovingElementsOfEnumSet class GFG { // Enum enum Game { CRICKET, HOCKEY, TENNIS } // Main driver method public static void main(String[] args) { // Creating EnumSet using allOf() EnumSet<Game> games = EnumSet.allOf(Game.class); // Printing the EnumSet System.out.println("EnumSet: " + games); // Using remove() boolean value1 = games.remove(Game.CRICKET); // Printing elements to the console System.out.println("Is CRICKET removed? " + value1); // Using removeAll() and storing the boolean result boolean value2 = games.removeAll(games); // Printing elements to the console System.out.println("Are all elements removed? " + value2); } }
EnumSet: [CRICKET, HOCKEY, TENNIS] Is CRICKET removed? true Are all elements removed? true
Algunos otros métodos de clases o interfaces se definen a continuación que de alguna manera nos ayudan a comprender mejor la clase AbstractSet de la siguiente manera:
Métodos declarados en la clase java.util.AbstractSet
MÉTODO |
DESCRIPCIÓN |
---|---|
es igual a(Objeto o) | Compara el objeto especificado con este conjunto para la igualdad. |
código hash() | Devuelve el valor del código hash para este conjunto. |
removeAll(Colección<?> c) | Elimina de este conjunto todos sus elementos que están contenidos en la colección especificada (operación opcional). |
Métodos declarados en la interfaz java.util.Collection
MÉTODO |
DESCRIPCIÓN |
---|---|
flujoParalelo() | Devuelve un Stream posiblemente paralelo con esta colección como fuente. |
removeIf(predicado<? filtro super E>) | Elimina todos los elementos de esta colección que satisfacen el predicado dado. |
corriente() | Devuelve un Stream secuencial con esta colección como fuente. |
toArray(IntFunction<T[]> generador) | Devuelve una array que contiene todos los elementos de esta colección, utilizando la función de generador proporcionada para asignar la array devuelta. |
Métodos declarados en la interfaz java.lang.Iterable
MÉTODO |
DESCRIPCIÓN |
---|---|
forEach(Consumidor<? super T> acción) | Realiza la acción dada para cada elemento del iterable hasta que se hayan procesado todos los elementos o la acción genere una excepción. |
Métodos declarados en la interfaz java.util.Set
MÉTODO |
DESCRIPCIÓN |
---|---|
agregar(E e) | Agrega el elemento especificado a este conjunto si aún no está presente (operación opcional). |
addAll(Colección<? extiende E> c) | Agrega el elemento especificado a este conjunto si aún no está presente (operación opcional). |
clear() | Elimina todos los elementos de este conjunto (operación opcional). |
contiene(Objeto o) | Devuelve verdadero si este conjunto contiene el elemento especificado. |
contieneTodo(Colección<?> c) | Devuelve verdadero si este conjunto contiene todos los elementos de la colección especificada. |
esta vacio() | Devuelve verdadero si este conjunto no contiene elementos. |
iterador() | Devuelve un iterador sobre los elementos de este conjunto. |
eliminar(Objeto o) | Elimina el elemento especificado de este conjunto si está presente (operación opcional). |
retenerTodo(Colección<?> c) | Conserva solo los elementos de este conjunto que están contenidos en la colección especificada (operación opcional). |
Talla() | Devuelve el número de elementos de este conjunto (su cardinalidad). |
divisor() | Crea un Spliterator sobre los elementos de este conjunto. |
aArray() | Devuelve una array que contiene todos los elementos de este conjunto. |
a la Array(T[] a) | Devuelve una array que contiene todos los elementos de este conjunto; el tipo de tiempo de ejecución de la array devuelta es el de la array especificada. |
Métodos declarados en la clase java.util.AbstractCollection
MÉTODO |
DESCRIPCIÓN |
---|---|
agregar(E e) | Garantiza que esta colección contenga el elemento especificado (operación opcional). |
addAll(Colección<? extiende E> c) | Agrega todos los elementos de la colección especificada a esta colección (operación opcional). |
clear() | Elimina todos los elementos de esta colección (operación opcional). |
contiene(Objeto o) | Devuelve verdadero si esta colección contiene el elemento especificado. |
contieneTodo(Colección<?> c) | Devuelve verdadero si esta colección contiene todos los elementos de la colección especificada. |
esta vacio() | Devuelve verdadero si esta colección no contiene elementos. |
iterador() | Devuelve un iterador sobre los elementos contenidos en esta colección. |
eliminar(Objeto o) | Elimina una sola instancia del elemento especificado de esta colección, si está presente (operación opcional). |
retenerTodo(Colección<?> c) | Retiene solo los elementos de esta colección que están contenidos en la colección especificada (operación opcional). |
aArray() | Devuelve una array que contiene todos los elementos de esta colección. |
a la Array(T[] a) | Devuelve una array que contiene todos los elementos de esta colección; el tipo de tiempo de ejecución de la array devuelta es el de la array especificada. |
Enstringr() | Devuelve una representación de string de esta colección. |
Este artículo es una contribución de Pratik Agarwal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeek y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA