Java EnumMap

Neste tutorial, aprenderemos sobre a classe Java EnumMap e suas operações com a ajuda de exemplos.

A EnumMapclasse da estrutura de coleções Java fornece uma implementação de mapa para elementos de um enum.

Em EnumMap, os elementos enum são usados ​​como chaves . Ele implementa a interface do Mapa.

Antes de aprendermos sobre EnumMap, certifique-se de conhecer os Enums Java.

Criando um EnumMap

Para criar um mapa enum, devemos importar o java.util.EnumMappacote primeiro. Depois de importar o pacote, aqui está como podemos criar mapas enum em Java.

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) EnumMap sizes = new EnumMap(Size.class); 

No exemplo acima, criamos um mapa enum denominado tamanhos.

Aqui,

  • Tamanho - chaves do enum que mapeiam para valores
  • Inteiro - valores do mapa enum associado às chaves correspondentes

Métodos de EnumMap

A EnumMapclasse fornece métodos que nos permitem executar vários elementos nos mapas enum.

Inserir elementos no EnumMap

  • put() - insere o mapeamento de chave / valor especificado (entrada) no mapa enum
  • putAll() - insere todas as entradas de um mapa especificado neste mapa

Por exemplo,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes1 = new EnumMap(Size.class); // Using the put() Method sizes1.put(Size.SMALL, 28); sizes1.put(Size.MEDIUM, 32); System.out.println("EnumMap1: " + sizes1); EnumMap sizes2 = new EnumMap(Size.class); // Using the putAll() Method sizes2.putAll(sizes1); sizes2.put(Size.LARGE, 36); System.out.println("EnumMap2: " + sizes2); ) ) 

Resultado

 EnumMap1: (PEQUENO = 28, MÉDIO = 32) EnumMap2: (PEQUENO = 28, MÉDIO = 32, GRANDE = 36) 

No exemplo acima, usamos o putAll()método para inserir todos os elementos de um mapa enum de tamanhos1 em um mapa de enum de tamanhos2.

Também é possível inserir elementos de outros, tais como mapas HashMap, TreeMap, etc, para um mapa enum usando putAll(). No entanto, todos os mapas devem ser do mesmo tipo de enum.

Acessar elementos EnumMap

1. Usando entrySet (), keySet () e values ​​()

  • entrySet() - retorna um conjunto de todos os mapeamentos de chaves / valores (entrada) de um mapa enum
  • keySet() - retorna um conjunto de todas as chaves de um mapa enum
  • values() - retorna um conjunto de todos os valores de um mapa enum

Por exemplo,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the entrySet() Method System.out.println("Key/Value mappings: " + sizes.entrySet()); // Using the keySet() Method System.out.println("Keys: " + sizes.keySet()); // Using the values() Method System.out.println("Values: " + sizes.values()); ) ) 

Resultado

 EnumMap: (PEQUENO = 28, MÉDIO = 32, GRANDE = 36, EXTRALARGE = 40) Mapeamentos de chave / valor: (PEQUENO = 28, MÉDIO = 32, GRANDE = 36, EXTRALARGO = 40) Chaves: (PEQUENO, MÉDIO, GRANDE, EXTRALARGE) Valores: (28, 32, 36, 40) 

2. Usando o método get ()

O get()método retorna o valor associado à chave especificada. Ele retorna nullse a chave especificada não for encontrada.

Por exemplo,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the get() Method int value = sizes.get(Size.MEDIUM); System.out.println("Value of MEDIUM: " + value); ) ) 

Resultado

 EnumMap: (PEQUENO = 28, MÉDIO = 32, GRANDE = 36, EXTRALARGE = 40) Valor de MÉDIO: 32 

Remover Elementos EnumMap

  • remove(key) - retorna e remove a entrada associada à chave especificada do mapa
  • remove(key, value) - remove a entrada do mapa apenas se a chave especificada for mapeada para o valor especificado e retornar um valor booleano

Por exemplo,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the remove() Method int value = sizes.remove(Size.MEDIUM); System.out.println("Removed Value: " + value); boolean result = sizes.remove(Size.SMALL, 28); System.out.println("Is the entry (SMALL=28) removed? " + result); System.out.println("Updated EnumMap: " + sizes); ) ) 

Resultado

EnumMap: (PEQUENO = 28, MÉDIO = 32, GRANDE = 36, EXTRALARGE = 40) Valor Removido: 32 A entrada (PEQUENO = 28) foi removida? EnumMap atualizado verdadeiro: (LARGE = 36, EXTRALARGE = 40)

Substituir Elementos EnumMap

  • replace(key, value) - substitui o valor associado à chave especificada pelo novo valor
  • replace(key, old, new) - substitui o valor antigo pelo novo valor apenas se o valor antigo já estiver associado à chave especificada
  • replaceAll(function) - substitui cada valor do mapa pelo resultado da função especificada
 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the replace() Method sizes.replace(Size.MEDIUM, 30); sizes.replace(Size.LARGE, 36, 34); System.out.println("EnumMap using replace(): " + sizes); // Using the replaceAll() Method sizes.replaceAll((key, oldValue) -> oldValue + 3); System.out.println("EnumMap using replaceAll(): " + sizes); ) ) 

Resultado

 EnumMap: (SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40) EnumMap using replace(): (SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40) EnumMap using replaceAll(): (SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43) 

In the above program, notice the statement

 sizes.replaceAll((key, oldValue) -> oldValue + 3); 

Here, the method accesses all the entries of the map. It then replaces all the values with the new values provided by the lambda expressions.

Other Methods

Method Description
clone() Creates a copy of the EnumMap
containsKey() Searches the EnumMap for the specified key and returns a boolean result
containsValue() Searches the EnumMap for the specified value and returns a boolean result
size() Returns the size of the EnumMap
clear() Removes all the entries from the EnumMap

EnumSet Vs. EnumMap

Both the EnumSet and EnumMap class provides data structures to store enum values. However, there exist some major differences between them.

  • Enum set is represented internally as a sequence of bits, whereas the enum map is represented internally as arrays.
  • Enum set is created using its predefined methods like allOf(), noneOf(), of(), etc. However, an enum map is created using its constructor.

Clonable and Serializable Interfaces

The EnumMap class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumMap 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.

A Serializableinterface permite que as classes sejam serializadas. Isso significa que os objetos das classes implementadas Serializablepodem ser convertidos em bits ou bytes.

Artigos interessantes...