Boa tarde pessoal, seguinte eu estou estudando a apostila de Algoritmo e Estrutura de Dados disponibilizada pela caelum, porem me deparei com a explicação do hashCode e surgiu uma duvida, segue abaixo a parte da explicação
equals e hashCode
Repare que a nossa busca pelo elemento usa o método contains da List. A implementação de lista que
estamos usando (assim como amaioria absoluta das coleções da API do Java) utiliza do método equals para
saber se determinado elemento está contido naquela lista ou não.
Um problema aparece quando rescrevemos o equals e não rescrevemos o hashCode: pode ser que existam
dois objetos, digamos a e b, que são considerados iguais pelo nosso método, mas possuem códigos de espalhamento
diferentes. Isto vai fazer com que a pesquisa por a, no caso de só existir b dentro do conjunto
retorne false, sendo que na verdade deveria retornar true pois estamos levando em consideração o que o
equals diz, e não o operador ==.
a explicação ficou clara, porem o que está descrito nunca acontece já que o hashCode utilizado é o native da classe Object, em outras palavras, implementei um exemplo do que está descrito e mesmo sem sobreescrever o hasCode() na minha entidade e o método contains() da ArrayList retorna true, pois o mesmo só usa o equals sobrescrito pela entidade.
Baseando-se nesse ponto o hashCode() sobrescrito serve somente para gerar um código hash(código de espalhamento) único para cada objeto?
que pode ser usado em estruturas de dados como HashSet ou HashMap, porem não interferem na comparação de objetos, certo?
pessoal por favor opinem e me corrijam se eu estiver errado, qualquer opinião é bem vinda, desde já agradeço.