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.
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")); // 2Para 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.