Sobes.tech
Junior — Middle

Quais os potenciais problemas que podem surgir ao usar um tipo de dado não string como chave num HashMap?

sobes.tech IA

Resposta da IA

Se utilizar um tipo de dado que não seja string como chave num HashMap, podem surgir os seguintes problemas:

  • Implementação incorreta dos métodos hashCode() e equals(): Para que o HashMap funcione corretamente, as chaves devem sobrescrever esses métodos de forma adequada. Caso contrário, podem ocorrer colisões ou dificuldades em encontrar o elemento correto.

  • Alteração da chave: Se a chave for alterada após ser inserida no HashMap (por exemplo, se um campo usado no cálculo do hash for modificado), o elemento pode tornar-se inacessível na busca, pois o hash mudará.

  • Desempenho: Objetos complexos podem ter cálculos de hash dispendiosos, o que desacelera as operações de inserção e busca.

  • Problemas com serialização e compatibilidade: Se as chaves forem objetos complexos, sua serialização e uso em diferentes contextos podem apresentar dificuldades.

Exemplo de uma chave correta com hashCode e equals sobrescritos:

class Key {
    private int id;
    private String name;

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Key key = (Key) o;
        return id == key.id && Objects.equals(name, key.name);
    }
}