Algoritmos e estruturas de dados · Estruturas de dados · 6 min de leitura
Tabelas hash (HashMap, Set, Dictionary)
Busca, inserção e remoção em O(1) na média: a função hash transforma a chave num índice. Como funcionam colisões, fator de carga e por que a ordem não é garantida.
Arraste para o lado para ver o diagrama inteiro.
Como funciona
A função hash transforma a chave num número; o resto da divisão pelo número de baldes dá o índice. Buscar uma chave é calcular o hash e olhar um balde só — por isso O(1) na média, não importa se são 10 ou 10 milhões de itens.
Colisões e fator de carga
Chaves diferentes podem cair no mesmo balde. A solução clássica é uma lista por balde (o HashMap do Java vira árvore quando a lista passa de 8). Para as listas ficarem curtas, a tabela cresce quando itens ÷ baldes passa do fator de carga (0,75 no Java): dobra os baldes e redistribui tudo.
Cuidados
- Chaves precisam de
equalsehashCodecoerentes (em Kotlin,data classjá gera; em Swift,Hashable). - Não mude um objeto depois de usá-lo como chave: o hash muda e ele "some".
- A ordem de iteração não é a de inserção, exceto em
LinkedHashMap(padrão domutableMapOfno Kotlin) e noMapdo JavaScript.
No código: antes e depois
// O(pedidos × clientes): procura o cliente na lista a cada pedido
const comNome = pedidos.map((p) => ({
...p,
cliente: clientes.find((c) => c.id === p.clienteId)?.nome,
})); // O(pedidos + clientes): indexa uma vez, consulta em O(1)
const porId = new Map(clientes.map((c) => [c.id, c.nome]));
const comNome = pedidos.map((p) => ({ ...p, cliente: porId.get(p.clienteId) })); Com 10 mil pedidos e 10 mil clientes, a primeira versão pode fazer 100 milhões de comparações; a segunda, 20 mil operações.
Em resumo
- Busca, inserção e remoção: O(1) na média.
- Pior caso O(n) se tudo colidir.
- Cresce ao passar do fator de carga (0,75 no Java).
- equals e hashCode precisam andar juntos.
- Troque buscas repetidas em lista por um mapa.
Exercícios
Responda e confira na hora. Complexidades valem com ou sem espaços, como O(n log n).
-
Qual a complexidade média de buscar uma chave numa tabela hash?
Ver a solução
Resposta: O(1). Calcula-se o hash e olha-se um balde, cuja lista é curta graças ao fator de carga.
-
E no pior caso, se todas as chaves caírem no mesmo balde (lista encadeada)?
Ver a solução
Resposta: O(n). O balde vira uma lista com os n itens e a busca percorre a lista.
-
Uma tabela com 16 baldes e fator de carga 0,75 aguenta quantos itens antes de precisar crescer?
Ver a solução
Resposta: 12. 16 × 0,75 = 12. Ao passar de 12 itens, a tabela dobra para 32 baldes.
Perguntar à IA
Monte um prompt pronto sobre Tabelas hash (HashMap, Set, Dictionary) na sua linguagem e no seu caso, e abra num chat gratuito.
O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.