Java/Estruturas de Dados/Hash Map
Java⏱ ~2 min de leitura

Hash Map

HashMap, chaves e valores

HashMap é a implementação mais usada da interface Map, que associa chaves únicas a valores de qualquer tipo. A busca, inserção e remoção são O(1) em média, graças ao algoritmo de hash: a chave é transformada em um índice que aponta diretamente para o bucket onde o par está armazenado.

Chaves são únicas: inserir um par com uma chave já existente sobrescreve o valor anterior e retorna o valor antigo. HashMap permite exatamente uma chave null e múltiplos valores null. A ordem de iteração não é garantida — use LinkedHashMap para manter a ordem de inserção, ou TreeMap para ordenar por chave.

Os métodos principais: put(k, v), get(k), remove(k), containsKey(k), containsValue(v), getOrDefault(k, default), putIfAbsent(k, v), entrySet() para iterar pares chave-valor.

Exemplo.java
import java.util.*;

Map<String, Integer> estoque = new HashMap<>();

// ── Adicionar / atualizar ─────────────────────────
estoque.put("Maçã",   50);
estoque.put("Banana", 30);
estoque.put("Laranja", 45);
estoque.put("Banana", 35);  // sobrescreve 30

// ── Acessar ───────────────────────────────────────
System.out.println(estoque.get("Maçã")); // 50
System.out.println(estoque.get("Uva"));  // null

// getOrDefault: evita NullPointerException
int qtd = estoque.getOrDefault("Uva", 0);
System.out.println(qtd); // 0

// ── Iterar sobre entradas ─────────────────────────
for (Map.Entry<String, Integer> e : estoque.entrySet()) {
    System.out.printf("%s: %d unidades%n", e.getKey(), e.getValue());
}

// ── Contar frequências (padrão clássico) ──────────
String texto = "java é uma linguagem e java é popular";
Map<String, Integer> freq = new HashMap<>();
for (String palavra : texto.split(" ")) {
    freq.merge(palavra, 1, Integer::sum);
}
System.out.println(freq.get("java")); // 2
💡 Dica pro

Para objetos como chaves, implemente hashCode() e equals() — se dois objetos são iguais por equals(), devem ter o mesmo hashCode(). Use ConcurrentHashMap em ambientes multi-thread.

Recompensa+35 XP+exercícios