O HashMap
em Java é uma implementação da interface Map
que permite armazenar pares chave-valor, onde cada chave é única e mapeia para um valor específico. Essa estrutura é amplamente utilizada quando precisamos associar dados (valores) a identificadores únicos (chaves), permitindo acesso rápido e eficiente.
Características do HashMap
1. Estrutura de Dados Baseada em Tabela Hash
O HashMap
utiliza uma tabela hash para distribuir os elementos, o que garante acesso rápido ao conteúdo. Cada chave é convertida em um índice da tabela usando um valor de hash, o que facilita a localização eficiente dos elementos.
2. Chave e Valor
No HashMap
, cada entrada é composta por uma chave e um valor, permitindo a recuperação de dados por meio da chave associada. É importante lembrar que as chaves devem ser únicas; caso uma chave duplicada seja inserida, o valor anterior será substituído pelo novo valor associado a essa chave.
3. Permite Chaves e Valores Nulos
Diferente de algumas outras coleções em Java, o HashMap
permite que uma chave seja null
e que valores também sejam nulos. Isso é útil para armazenar valores indefinidos ou não atribuídos, embora o uso excessivo de nulos possa dificultar a depuração.
4. Não Mantém Ordem
Os elementos no HashMap
não têm ordem definida, ou seja, a sequência de inserção não é preservada. Para coleções ordenadas, você pode utilizar o LinkedHashMap
, que mantém a ordem de inserção, ou o TreeMap
, que ordena as chaves em ordem natural.
Principais Métodos do HashMap
- put(K key, V value): Adiciona um par chave-valor ao mapa.
- get(Object key): Retorna o valor associado a uma chave específica.
- remove(Object key): Remove a entrada associada a uma chave específica.
- containsKey(Object key): Verifica se uma chave está presente no mapa.
- containsValue(Object value): Verifica se um valor específico está presente.
- size(): Retorna o número de entradas no mapa.
- keySet(): Retorna um conjunto de todas as chaves.
- values(): Retorna uma coleção de todos os valores.
Exemplo de Uso do HashMap
Vamos criar um exemplo simples de HashMap
onde mapeamos o nome de uma cidade ao seu respectivo código de área:
import java.util.HashMap;
public class ExemploHashMap {
public static void main(String[] args) {
HashMap<String, Integer> codigoArea = new HashMap<>();
// Adicionando pares chave-valor
codigoArea.put("São Paulo", 11);
codigoArea.put("Rio de Janeiro", 21);
codigoArea.put("Belo Horizonte", 31);
// Acessando um valor usando a chave
System.out.println("Código de área de São Paulo: " + codigoArea.get("São Paulo"));
// Verificando se uma chave existe
if (codigoArea.containsKey("Curitiba")) {
System.out.println("Código de área de Curitiba: " + codigoArea.get("Curitiba"));
} else {
System.out.println("Curitiba não está no mapa.");
}
// Removendo um par chave-valor
codigoArea.remove("Belo Horizonte");
// Iterando sobre as chaves e valores do HashMap
for (String cidade : codigoArea.keySet()) {
System.out.println("Cidade: " + cidade + ", Código de área: " + codigoArea.get(cidade));
}
}
}
Explicação do Código
- Criamos um
HashMap
chamadocodigoArea
, onde as chaves sãoString
(nomes das cidades) e os valores sãoInteger
(códigos de área). - Utilizamos o método
put()
para adicionar entradas ao mapa. - Com o
get()
, recuperamos o código de área de uma cidade específica. - O método
containsKey()
verifica se uma cidade está presente. - O
remove()
elimina uma entrada do mapa. - Finalmente, iteramos sobre o
HashMap
usandokeySet()
para imprimir cada cidade e seu código de área.
Aplicações do HashMap
O HashMap
é uma excelente escolha para armazenar dados que exigem associação rápida entre uma chave e um valor, como:
- Cadastro de clientes: Associando IDs de cliente a suas informações.
- Cache de dados: Armazenamento temporário para acesso rápido.
- Contagem de frequência: Para armazenar a frequência de palavras em um texto.
Conclusão
O HashMap
é uma estrutura poderosa e eficiente para trabalhar com coleções de pares chave-valor em Java. Suas principais vantagens são a rapidez nas operações de inserção e recuperação de dados, além da flexibilidade de aceitar chaves e valores nulos. Embora o HashMap
não mantenha uma ordem específica, ele é amplamente utilizado devido ao desempenho, especialmente quando a sequência de elementos não é um requisito.