1
resposta

Sempre devo usar o HashCode quando uso o equals?

Ou isso é apenas para Set? Se eu usar o List, por exemplo, irei ter que sobrescrever o HashCode tbm?

1 resposta

Coleções como HashMap e HashSet usam um valor hashcode de um objeto para determinar como ele deve ser armazenado dentro de uma coleção, e o hashcode é usado novamente para localizar o objeto em sua coleção.

A recuperação de hash é um processo de duas etapas:

1) usando hashCode()

2) pesquisa pelo elemento certo (usando equals())

O equals() é usado em vários momentos, não apenas em Listas e afins, exemplo

class Money {
    int amount;
    String currencyCode;
}
Money income = new Money(55, "USD");
Money expenses = new Money(55, "USD");
boolean balanced = income.equals(expenses)

Seria de esperar que income.equals (despesas) retorne verdadeiro . Mas com a classe Money em sua forma atual, isso não acontecerá.

A implementação padrão de equals () na classe Object diz que igualdade é o mesmo que identidade de objeto usando ==.

Nesse caso também é importante sobreescrever o equals()