HashMap em Java: Trabalhando com Estrutura de Dados Chave-Valor

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

  1. Criamos um HashMap chamado codigoArea, onde as chaves são String (nomes das cidades) e os valores são Integer (códigos de área).
  2. Utilizamos o método put() para adicionar entradas ao mapa.
  3. Com o get(), recuperamos o código de área de uma cidade específica.
  4. O método containsKey() verifica se uma cidade está presente.
  5. O remove() elimina uma entrada do mapa.
  6. Finalmente, iteramos sobre o HashMap usando keySet() 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.