Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java EnumSet: Criação, Operações e Dicas de Desempenho

Java EnumSet

Este guia orienta você na criação, manipulação e otimização de coleções Java EnumSet com exemplos de código práticos e insights de melhores práticas.

A classe EnumSet é uma implementação de conjunto de alta performance projetada exclusivamente para tipos enum. Ela implementa a interface java.util.Set e também herda Cloneable e Serializable, tornando-a versátil e eficiente.

Antes de mergulhar no EnumSet, certifique-se de estar confortável com enums Java, pois o conjunto é fortemente acoplado a um único tipo enum.

Criando um EnumSet

Diferente de outras implementações de set, EnumSet não expõe construtores públicos. Em vez disso, você usa seus métodos de fábrica estáticos para construir um conjunto.

1. Usando EnumSet.allOf()

O método allOf() cria um conjunto que contém toda constante do tipo enum especificado.

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

Saída

EnumSet: [PEQUENO, MEDIO, GRANDE, EXTRAGRANDE]

2. Usando EnumSet.noneOf()

Cria um conjunto vazio que pode conter apenas valores do tipo enum especificado.

import java.util.EnumSet;
class Main {
    enum Tamanho { PEQUENO, MEDIO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanho> tamanhos = EnumSet.noneOf(Tamanho.class);
        System.out.println("EnumSet Vazio: " + tamanhos);
    }
}

Saída

EnumSet Vazio: []

Nota: O conjunto resultante aceita apenas constantes Tamanho porque foi instanciado com Tamanho.class.

3. Usando EnumSet.range()

Constrói um conjunto contendo todas as constantes de enum de um limite inferior a um superior, inclusivo.

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

Saída

EnumSet: [MEDIO, GRANDE, EXTRAGRANDE]

4. Usando EnumSet.of()

Cria um conjunto contendo uma ou mais constantes de enum específicas.

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

Saída

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

Operações Comuns no EnumSet

Adicionando Elementos

import java.util.EnumSet;
class Main {
    enum Tamanho { PEQUENO, MEDIO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanho> todos = EnumSet.allOf(Tamanho.class);
        EnumSet<Tamanho> selecionados = EnumSet.noneOf(Tamanho.class);
        selecionados.add(Tamanho.MEDIO);
        System.out.println("Após add(): " + selecionados);
        selecionados.addAll(todos);
        System.out.println("Após addAll(): " + selecionados);
    }
}

Saída

Após add(): [MEDIO] Após addAll(): [PEQUENO, MEDIO, GRANDE, EXTRAGRANDE]

Note que addAll() aceita qualquer Collection<Tamanho>, incluindo listas ou conjuntos, desde que contenham o mesmo tipo enum.

Iterando Elementos

Use um Iterator para percorrer o conjunto:

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

Saída

EnumSet: PEQUENO, MEDIO, GRANDE, EXTRAGRANDE,

Removendo Elementos

import java.util.EnumSet;
class Main {
    enum Tamanho { PEQUENO, MEDIO, GRANDE, EXTRAGRANDE }
    public static void main(String[] args) {
        EnumSet<Tamanho> tamanhos = EnumSet.allOf(Tamanho.class);
        System.out.println("EnumSet: " + tamanhos);
        boolean removido = tamanhos.remove(Tamanho.MEDIO);
        System.out.println("MEDIO foi removido? " + removido);
        boolean limpo = tamanhos.removeAll(tamanhos);
        System.out.println("Todos elementos removidos? " + limpo);
    }
}

Saída

EnumSet: [PEQUENO, MEDIO, GRANDE, EXTRAGRANDE] MEDIO foi removido? true Todos elementos removidos? true

Métodos Auxiliares Adicionais

MétodoDescrição
copyOf()Cria um novo EnumSet contendo os mesmos elementos.
contains()Verifica se uma constante específica está presente.
isEmpty()Retorna true se o conjunto não tem elementos.
size()Retorna o número de elementos.
clear()Remove todos os elementos.

Cloneable e Serializable

EnumSet implementa Cloneable, permitindo criar uma cópia rasa via clone(). Também implementa Serializable, permitindo transmissão segura por redes ou persistência em disco.

Por Que Usar EnumSet?

Como EnumSet armazena seus valores como um vetor de bits, operações como add, remove e contains executam em tempo constante com overhead mínimo de memória. A JVM já conhece o conjunto exato de constantes possíveis para um dado enum, o que torna EnumSet muito mais eficiente que implementações genéricas como HashSet ou TreeSet.

Na prática, escolha EnumSet sempre que precisar de um conjunto de alta performance de valores enum.

Java

  1. Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
  2. Comentários em Java: Tipos, Uso e Boas Práticas
  3. Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
  4. Dominando Strings em Java: Criação, Métodos e Boas Práticas
  5. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  6. Dominando Enums em Java: Guia Completo de Enums e Enum Classes
  7. Construtores de Enum em Java Explicados com Exemplo Prático
  8. Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
  9. Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
  10. Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código