Sobes.tech
Junior — Middle

Como é que a correspondência de chaves é determinada nestas estruturas ou algoritmos?

sobes.tech IA

Resposta da IA

Em Java, a correspondência de chaves em estruturas de dados como HashMap ou HashSet é determinada pelos métodos hashCode() e equals() do objeto chave.

  1. Primeiro, chama-se hashCode() para calcular o código hash da chave, a fim de determinar o balde (cesto) na tabela hash.
  2. Se houver vários elementos nesse balde (colisão), o método equals() é chamado em cada um deles para verificar a igualdade real das chaves.

Assim, para que as chaves funcionem corretamente, é necessário sobrescrever ambos os métodos: hashCode() e equals(), de modo que objetos com valores lógicos iguais tenham o mesmo código hash e sejam considerados iguais.

Exemplo:

class Person {
    private String id;

    @Override
    public int hashCode() {
        return id.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person other = (Person) obj;
        return id.equals(other.id);
    }
}