Gabarito disponível
import java.util.HashMap;
import br.marinha.mil.API.Pessoal
public static void main(String[] args){
HashMap<String, Militar> hashMapMilitares =
new HashMap<String, Militar>();
CadastroMilitares cadastroMilitares =
new Pessoal().load();
List<Militar> listaMilitares = cadastroMilitares.getMilitares();
for (Militar militar: listaMilitares) {
for (String nomeDeGuerra: hashMapMilitares.keySet()) {
if (nomeDeGuerra.hashCode().
equals(militar.getNomeDeGuerra.hashCode()) {
throw new Exception("Código hash duplicado - COLISÃO!");
}
}
hashMapMilitares.put(militar.getNomeDeGuerra(), militar);
}
}
O método "load()" da classe "Pessoal" carrega o cadastro de militares do banco de dados integrado ao sistema em uma classe "CadastroMilitares" que gerencia o conjunto de tais pessoas. Por meio do método getMilitares dessa classe, uma instância de HashList é carregada, onde "Militar" representa a classe com as informações referentes ao indivíduo, dentre os quais o nome de guerra, atributo do tipo String acessado mediante o getter "getNomeDeGuerra". Sabe-se que não existem dois militares com mesmo nome de guerra registrado. Assim, acerca do código acima e da preocupação do 1º Tenente (T) Cauteloso, assinale a opção correta.
Resolução comentada
O HashMap do Java trata colisões internamente.
Colisões de hashCode são esperadas, e o HashMap as resolve internamente (encadeamento em lista ou árvore) usando equals para diferenciar as chaves. Por isso a verificação manual do tenente é desnecessária e o acesso aos dados não é prejudicado.
Análise das alternativas
A) Errada: objetos distintos podem ter o mesmo hashCode. B) Errada: o HashMap normalmente consome mais memória que um ArrayList. C) Errada: a colisão não gera erro no sistema. D) Errada: a colisão não sobrescreve valores; só chaves iguais (equals) o fazem.
Referência: Java – java.util.HashMap, tratamento de colisões.
Resolução comentada do VaiConcursos.