Pular para o conteúdo

Serviço de Seleção do Pessoal da Marinha (SSPM) · Marinha do Brasil 2022

Questão 17 — Programação: Java — HashMap e Colisão de Hash

Programação Java — HashMap e Colisão de Hash

Serviço de Seleção do Pessoal da Marinha (SSPM) 2022

Marinha do Brasil · Quadro Técnico do Corpo Auxiliar da Marinha (CP-T) — Informática · Caderno Amarela

Gabarito disponível

O 1º Tenente (T) Cauteloso, ao ler acerca da problemática de colisão em variáveis do tipo HashMap escreveu o código Java abaixo.

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.
Selecione uma alternativa

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.

Ver gabarito

Gabarito: E

Fonte: Gabarito preliminar: Gabarito final (após recursos) — página 6