Java EnumSet

Neste tutorial, aprenderemos sobre a classe Java EnumSet e seus vários métodos com a ajuda de exemplos.

A EnumSetclasse da estrutura de coleções Java fornece uma implementação de conjunto de elementos de um único enum.

Antes de aprender sobre EnumSet, certifique-se de saber sobre Java Enums.

Ele implementa a interface Set.

Criando EnumSet

Para criar um conjunto enum, devemos importar o java.util.EnumSetpacote primeiro.

Ao contrário de outras implementações de conjunto, o conjunto enum não tem construtores públicos. Devemos usar os métodos predefinidos para criar um conjunto enum.

1. Usando allOf (Tamanho)

O allof()método cria um conjunto enum que contém todos os valores do tipo de enum especificado Size. Por exemplo,

 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 sizes = EnumSet.allOf(Size.class); System.out.println("EnumSet: " + sizes); ) ) 

Resultado

 EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) 

Observe a declaração,

 EnumSet sizes = EnumSet.allOf(Size.class); 

Aqui, Size.class denota o enum Size que criamos.

2. Usando noneOf (Size)

O noneOf()método cria um conjunto enum vazio. Por exemplo,

 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 sizes = EnumSet.noneOf(Size.class); System.out.println("Empty EnumSet: " + sizes); ) ) 

Resultado

 EnumSet vazio: () 

Aqui, criamos um enum vazio denominado tamanhos.

Observação : só podemos inserir elementos do tipo enum Size no programa acima. É porque criamos nosso conjunto enum vazio usando enum Size.

3. Usando o método range (e1, e2)

O range()método cria um conjunto enum contendo todos os valores de um enum entre e1 e e2 incluindo ambos os valores. Por exemplo,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using range() EnumSet sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE); System.out.println("EnumSet: " + sizes); ) ) 

Resultado

 EnumSet: (MEDIUM, LARGE, EXTRALARGE) 

4. Usando o Método ()

O of()método cria um conjunto enum contendo os elementos especificados. Por exemplo,

 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 sizes1 = EnumSet.of(Size.MEDIUM); System.out.println("EnumSet1: " + sizes1); EnumSet sizes2 = EnumSet.of(Size.SMALL, Size.LARGE); System.out.println("EnumSet2: " + sizes2); ) ) 

Resultado

 EnumSet1: (MÉDIO) EnumSet2: (PEQUENO, GRANDE) 

Métodos de EnumSet

A EnumSetclasse fornece métodos que nos permitem executar vários elementos no conjunto enum.

Inserir elementos em EnumSet

  • add() - insere valores de enum especificados para o conjunto de enum
  • addAll() insere todos os elementos da coleção especificada no conjunto

Por exemplo,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumSet using allOf() EnumSet sizes1 = EnumSet.allOf(Size.class); // Creating an EnumSet using noneOf() EnumSet 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); ) ) 

Resultado

 EnumSet usando add (): (MEDIUM) EnumSet usando addAll (): (SMALL, MEDIUM, LARGE, EXTRALARGE) 

No exemplo acima, usamos o addAll()método para inserir todos os elementos de um conjunto enum size1 em um conjunto enum size2.

Também é possível inserir elementos de outras colecções tais como ArrayList, LinkedList, etc, para um conjunto de enum usando addAll(). No entanto, todas as coleções devem ser do mesmo tipo de enum.

Acessar elementos EnumSet

Para acessar os elementos de um conjunto enum, podemos usar o iterator()método. Para usar este método, devemos importar o java.util.Iteratorpacote. Por exemplo,

 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 sizes = EnumSet.allOf(Size.class); Iterator iterate = sizes.iterator(); System.out.print("EnumSet: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Resultado

 EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE, 

Nota :

  • hasNext()retorna truese houver um próximo elemento no conjunto enum
  • next() retorna o próximo elemento no conjunto enum

Remover Elementos EnumSet

  • remove() - remove o elemento especificado do conjunto enum
  • removeAll() - remove todos os elementos do conjunto enum

Por exemplo,

 import java.util.EnumSet; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating EnumSet using allOf() EnumSet 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); ) ) 

Resultado

EnumSet: (SMALL, MEDIUM, LARGE, EXTRALARGE) O MEDIUM foi removido? true Todos os elementos foram removidos? verdade

Outros métodos

Método Descrição
copyOf() Creates a copy of the EnumSet
contains() Searches the EnumSet for the specified element and returns a boolean result
isEmpty() Checks if the EnumSet is empty
size() Returns the size of the EnumSet
clear() Removes all the elements from the EnumSet

Clonable and Serializable Interfaces

The EnumSet class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumSet class to make a copy of instances of the class.

Serializable Interface

Whenever Java objects need to be transmitted over a network, objects need to be converted into bits or bytes. This is because Java objects cannot be transmitted over the network.

The Serializable interface allows classes to be serialized. This means objects of the classes implementing Serializable can be converted into bits or bytes.

Why EnumSet?

O EnumSetfornece uma maneira eficiente de armazenar valores enum do que outras implementações de conjunto (como HashSet, TreeSet).

Um conjunto de enum armazena apenas valores de enum de um enum específico. Portanto, a JVM já conhece todos os valores possíveis do conjunto.

Esta é a razão pela qual os conjuntos enum são implementados internamente como uma sequência de bits. Bits especifica se os elementos estão presentes no conjunto enum ou não.

O bit de um elemento correspondente é ativado se esse elemento estiver presente no conjunto.

Artigos interessantes...