Junior — Middle
O que acontece se, em vez de uma string, outro tipo de objeto for usado como chave numa estrutura de dados?
sobes.tech IA
Resposta da IA
Em Java, como chave em estruturas de dados como HashMap, pode usar qualquer objeto, mas é importante que a classe desse objeto redefina corretamente os métodos hashCode() e equals(). Se a chave não for uma string, mas, por exemplo, um objeto personalizado, então:
hashCode()deve retornar um valor estável e único (na medida do possível) para uma distribuição correta na tabela de hash.equals()deve comparar os objetos corretamente em termos de significado, para evitar colisões e duplicados.
Se esses métodos não forem redefinidos, o comportamento da coleção será incorreto: as chaves podem não ser encontradas, e podem surgir duplicados.
Exemplo:
class Key {
int id;
Key(int id) { this.id = id; }
@Override
public int hashCode() {
return Integer.hashCode(id);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Key)) return false;
Key other = (Key) o;
return this.id == other.id;
}
}
Map<Key, String> map = new HashMap<>();
map.put(new Key(1), "value");
System.out.println(map.get(new Key(1))); // irá mostrar "value"
Se usar um objeto sem redefinir esses métodos, a busca por chave pode não funcionar.