Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java EnumSet: Creación, Operaciones y Consejos de Rendimiento

Java EnumSet

Esta guía te lleva a través de la creación, manipulación y optimización de colecciones EnumSet de Java con ejemplos de código prácticos y mejores prácticas.

La clase EnumSet es una implementación de set de alto rendimiento diseñada exclusivamente para tipos enum. Implementa la interfaz java.util.Set y también hereda Cloneable y Serializable, haciéndola versátil y eficiente.

Antes de sumergirte en EnumSet, asegúrate de estar cómodo con enums de Java, ya que el set está fuertemente acoplado a un solo tipo enum.

Java EnumSet: Creación, Operaciones y Consejos de Rendimiento


Creando un EnumSet

A diferencia de otras implementaciones de set, EnumSet no expone constructores públicos. En su lugar, usas sus métodos de fábrica estáticos para construir un set.

1. Usando EnumSet.allOf()

El método allOf() crea un set que contiene cada constante del tipo enum especificado.

import java.util.EnumSet;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> tamanios = EnumSet.allOf(Tamanio.class);
        System.out.println("EnumSet: " + tamanios);
    }
}

Salida

EnumSet: [PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE]

2. Usando EnumSet.noneOf()

Crea un set vacío que solo puede contener valores del tipo enum especificado.

import java.util.EnumSet;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> tamanios = EnumSet.noneOf(Tamanio.class);
        System.out.println("EnumSet Vacío: " + tamanios);
    }
}

Salida

EnumSet Vacío: []

Nota: El set resultante acepta solo constantes Tamanio porque se instanció con Tamanio.class.

3. Usando EnumSet.range()

Construye un set conteniendo todas las constantes enum desde un límite inferior a uno superior, inclusive.

import java.util.EnumSet;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> tamanios = EnumSet.range(Tamanio.MEDIANO, Tamanio.EXTRAGRANDE);
        System.out.println("EnumSet: " + tamanios);
    }
}

Salida

EnumSet: [MEDIANO, GRANDE, EXTRAGRANDE]

4. Usando EnumSet.of()

Crea un set conteniendo una o más constantes enum específicas.

import java.util.EnumSet;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> tamanios1 = EnumSet.of(Tamanio.MEDIANO);
        System.out.println("EnumSet1: " + tamanios1);
        EnumSet<Tamanio> tamanios2 = EnumSet.of(Tamanio.PEQUENO, Tamanio.GRANDE);
        System.out.println("EnumSet2: " + tamanios2);
    }
}

Salida

EnumSet1: [MEDIANO] EnumSet2: [PEQUENO, GRANDE]

Operaciones Comunes en EnumSet

Añadiendo Elementos

import java.util.EnumSet;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> todos = EnumSet.allOf(Tamanio.class);
        EnumSet<Tamanio> seleccionados = EnumSet.noneOf(Tamanio.class);
        seleccionados.add(Tamanio.MEDIANO);
        System.out.println("Después de add(): " + seleccionados);
        seleccionados.addAll(todos);
        System.out.println("Después de addAll(): " + seleccionados);
    }
}

Salida

Después de add(): [MEDIANO] Después de addAll(): [PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE]

Nota que addAll() acepta cualquier Collection<Tamanio>, incluyendo listas o sets, mientras contengan el mismo tipo enum.

Iterando Elementos

Usa un Iterator para recorrer el set:

import java.util.EnumSet;
import java.util.Iterator;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> tamanios = EnumSet.allOf(Tamanio.class);
        Iterator<Tamanio> it = tamanios.iterator();
        System.out.print("EnumSet: ");
        while (it.hasNext()) {
            System.out.print(it.next() + ", ");
        }
    }
}

Salida

EnumSet: PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE,

Eliminando Elementos

import java.util.EnumSet;
class Main {
    enum Tamanio { PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanio> tamanios = EnumSet.allOf(Tamanio.class);
        System.out.println("EnumSet: " + tamanios);
        boolean eliminado = tamanios.remove(Tamanio.MEDIANO);
        System.out.println("¿Se eliminó MEDIANO? " + eliminado);
        boolean limpiado = tamanios.removeAll(tamanios);
        System.out.println("¿Se eliminaron todos los elementos? " + limpiado);
    }
}

Salida

EnumSet: [PEQUENO, MEDIANO, GRANDE, EXTRAGRANDE] ¿Se eliminó MEDIANO? true ¿Se eliminaron todos los elementos? true

Métodos Auxiliares Adicionales

MétodoDescripción
copyOf()Crea un nuevo EnumSet conteniendo los mismos elementos.
contains()Verifica si una constante específica está presente.
isEmpty()Devuelve true si el set no tiene elementos.
size()Devuelve el número de elementos.
clear()Elimina todos los elementos.

Cloneable y Serializable

EnumSet implementa Cloneable, permitiéndote crear una copia superficial vía clone(). También implementa Serializable, permitiendo transmisión segura por red o persistencia a disco.

Por Qué Usar EnumSet

Como EnumSet almacena sus valores como un vector de bits, operaciones como add, remove y contains se ejecutan en tiempo constante con sobrecarga de memoria mínima. La JVM ya conoce el conjunto exacto de constantes posibles para un enum dado, lo que hace a EnumSet mucho más eficiente que implementaciones genéricas como HashSet o TreeSet.

En la práctica, elige EnumSet siempre que necesites un set de alto rendimiento de valores enum.

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  3. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  4. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  5. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  6. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  7. Dominando Enums en Java: Guía completa de Enums y Clases Enum
  8. Constructores de Enum en Java explicados con ejemplo práctico
  9. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  10. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  11. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código