EnumSet en Java

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:

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.

EnumSet in Java Collection

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);
    }
}
Producción

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);
    }
}
Producción

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);
    }
}
Producción

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(", ");
        }
    }
}
Producción

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);
    }
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *