Por que sobrescrever `equals` sem `hashCode` quebra o HashMap
Pergunta
Em Java, o que acontece se você sobrescreve `equals()` numa classe mas não sobrescreve `hashCode()`, e usa objetos dessa classe como chave de um HashMap?
Resposta esperada
O contrato diz: objetos iguais por `equals` devem ter o mesmo `hashCode`. O HashMap primeiro usa `hashCode` pra achar o bucket e só então compara com `equals` dentro do bucket. Se dois objetos são `equals` mas têm `hashCode` diferente (o padrão de `Object` é baseado na identidade/endereço), eles caem em buckets diferentes: você guarda com uma chave e não consegue recuperar com uma chave 'igual', `containsKey` retorna false, e podem existir duplicatas lógicas. A regra: sempre sobrescreva os dois juntos, usando os mesmos campos, e mantenha `hashCode` consistente enquanto o objeto é chave (campos imutáveis de preferência).
Por que perguntam isso
Pergunta quase obrigatória em Java. Resposta forte descreve a mecânica bucket→equals e menciona usar campos imutáveis pra chave.