HashCode

7 respostas
thundercas

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 :stuck_out_tongue:

Obrigado!!

7 Respostas

P

o equals é utilizado para vc fazer comparacoes dentro do heap (local onde os objetos ficam durante a execucao do aplicativo - local controlado pela JVM)....

ou seja, vc faz comparacoes entre objetos....

String a = "Sexta";
String b = "Sexta"; 

if(a.equals(b))
System.out.print("equals");

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 :slight_smile:

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 :slight_smile:

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.

Um ótimo material sobre o assunto está no terceiro capítulo do livro Effective Java. Lá ele descreve o hash, como implementa-lo e um pouco de sua utilidade. Não deixe de ler. O link é o seguinte:
http://developer.java.sun.com/developer/Books/effectivejava/Chapter3.pdf

thundercas

Legal… Então, realmente o HashCode é um denominador de grupos, que classifica como pertencentes do mesmo grupo objetos iguais… Legal :stuck_out_tongue: 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.

Criado 30 de novembro de 2007
Ultima resposta 1 de dez. de 2007
Respostas 7
Participantes 5