Rita,
 
Por defini��o, uma fun��o de hash possui as seguintes propriedades:
 
   1. Dado um par�metro qualquer, retorna um n�mero (chamado hashcode).
   2. Repetidas aplica��es da fun��o hash sobre o mesmo par�metro devem retornar o mesmo n�mero***, isto �, "10/10/2002Abacaxi" vai sempre retornar o mesmo hashcode.
 
   3. O ideal seria que fosse retornado um n�mero diferente para cada par�metro, isto �, seria perfeito se dois par�metros diferentes sempre resultassem em hashcodes diferentes.
 
Assim, pela pr�pria defini��o das fun��es de hash, elas n�o precisam possuir uma fun��o inversa (que dado um n�mero retorne o par�metro). E na pr�tica, fun��es de hash n�o possuem inversa mesmo..
 
 
P�! mais pra que serve isso?
 
 
 
Algumas estruturas de dados utilizam o hashcode para armazenar os par�metros na estrutura. geralmente o hashcode influencia diretamente o �ndice onde o objeto ser� armaenado. estas estruturas de dados s�o conhecidas por estruturas espar�as.
 
Agora especificamente em Java.....
 
Java j� possui todas as estruturas de dados padr�es implementadas, e algumas delas utilizam hashcode, como � o caso do Hashtable. Para que estas estruturas que precisam de um hashcode funcionem para todo tipo de objetos, foi necess�rio a cria��o da fun��o hashCode() na classe Object, garantindo que todos os objetos possuissem seu hashcode.
 
_Se n�o me engano_, esta fun��o foi implementada da forma a retornar um c�digo hash baseado na posi��o de mem�ria onde o objeto est� alocado. Assim, o sinal *** no item 2 quer dizer que � poss�vel que o hashcode mude entre uma execu��o e outra, mas permanece consante durante durante a execu��o.
 
 
...Mas vc n�o est� "presa" � fun��o de hash j� implementada... voc� pode implementar a sua pr�pria. para isto basta reimplementar a fun��o hashCode() em seus objetos.
A vantagem seria que como voc� � quem sabe que tipos de objetos est�o sendo colocados em sua estrutura de dados, � muito poss�vel que voc� consiga implementar uma fun��o de hash que se aproxime mais ao objetivo descrito no item 3, que diz que as estruturas de dados que usam hash possuem uma performance debilitada quando objetos diferentes resultam no mesmo hashcode (isto � chamado de colis�o). Novamente, como voc� � quem conhece os objetos a serem armazenados, voc� pode implementar uma fun��o de hash espec�fica para seus objetos, que resulte em uma menor probabilidade de colis�o no seu caso espec�fico.
 
 
 
 
-Resumindo-
hashCode � muito �til em algumas estruturas de dados, e � usado "internamente", isto �, geralmente n�o � necess�rio se preocupar com isso. =p
 
 
 
 
Ufa!
Acho que � s�.
 
Espero que isto ajude.
 
 
Luiz Felipe Molina.
----- Original Message -----
Sent: Wednesday, December 11, 2002 3:31 PM
Subject: [java-list] Hashcode

Eu tenho uma String
 
String teste = "10/10/2002Abacaxi"
 
System.out.println(teste.hashCode());
 
Isso me gera um numero, como eu peco a situacao inversa, como eu fa�o o unHascode ...... ? Qual a finalidade pratica do Hashcode ?
 
Obrigada
 
Rita

Responder a