Neste tutorial, aprenderemos sobre a classe Java EnumMap e suas operações com a ajuda de exemplos.
A EnumMap
classe 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.EnumMap
pacote 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 EnumMap
classe 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 enumputAll()
- 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 enumkeySet()
- retorna um conjunto de todas as chaves de um mapa enumvalues()
- 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 null
se 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 maparemove(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 valorreplace(key, old, new)
- substitui o valor antigo pelo novo valor apenas se o valor antigo já estiver associado à chave especificadareplaceAll(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 Serializable
interface permite que as classes sejam serializadas. Isso significa que os objetos das classes implementadas Serializable
podem ser convertidos em bits ou bytes.