Galera, já pesquisei a respeito de HashCode/Equals, mas ainda não consegui entender qual a função deste método e quando implementá-lo. Pelo que entendi, ele serve para criar 1 código único quando 2 Objetos forem equals, ou seja, criar grupos. Se possível, gostaria de um exemplo simples desta funcionalidade.
Repito, tentei inclusive ler alguns e-books a respeito, mas ainda não entrou em minha cabeça. Se alguém puder dar uma maozinha
o equals é utilizado para vc fazer comparacoes dentro do heap (local onde os objetos ficam durante a execucao do aplicativo - local controlado pela JVM)....
vc esta querendo comparar se um objeto eh igual ao outro usando o hashcode de cada?
thundercas
Na verdade, o método equals eu conheço… Eu estou querendo entender a utilização do HashCode… Tenho que fazer um exercício alterando o HashCode e o Equals… Por isso estou tentando entender a lógica dos métodos…
Vecchiato
Quando dois objetos forem equals eles devem ter o mesmo hashCode, e quando hashCode deles for diferente eles não devem ser equals. Isso vc utiliza em Collection do estilo hashmap, hashset onde o hashcode é utilizado para achar seu objeto na coleção de forma mais eficiente
Bom basicamente é isso
LPJava
voce vai perceber a essencia qdo estudar conjuntos como HashMap, LinkedHashSet etc… pois ai vc tem a essencia de iteração onde a regra de equals e hashin funcionam…
no momento procure entender a regra e como implementar qdo chegar em conjunto o material que vc estiver lendo normalmente ele vai citar o hashCode…
Mas por boa pratica de programacao ao implementar equals implemente o hashCode… e so lembrando que String e Wrappers j faz isso por padrao… qualquer coisa classe vc q deve implementar o hashCode…
ViniGodoy
Vecchiato:
Quando dois objetos forem equals eles devem ter o mesmo hashCode, e quando hashCode deles for diferente eles não devem ser equals. Isso vc utiliza em Collection do estilo hashmap, hashset onde o hashcode é utilizado para achar seu objeto na coleção de forma mais eficiente
Não é bem assim. A única imposição que existe é que dois objetos iguais podem ter o mesmo hashCode. Entretanto, objetos diferentes também podem ter o mesmo hashcode, embora um bom hashcode torne isso muito improvável. Por isso, hashCodes não são 100% confiáveis como chaves.
A utilidade do hash é que ele pode ser utilizado para criar estruturas de dados extremamente otimizadas, como os HashSets.
Legal… Então, realmente o HashCode é um denominador de grupos, que classifica como pertencentes do mesmo grupo objetos iguais… Legal Valeu galera…
ViniGodoy
Não, como eu falei, objetos diferentes podem ter hashCodes iguais, embora num hashCode bem implementado isso seja pouco provável (mas ainda sim possível).
E objetos iguais necessariamente terão que ter hashCodes iguais.
O hashCode não classifica nada. Quem classifica é o HashSet.
Ainda assim, os objetos que tiverem o mesmo hashcode, não sendo iguais, podem ser muito diferentes um do outro.