|
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.
|
- [java-list] Hashcode Rita Fernandes
- Re: [java-list] Hashcode Josivan de Souza
- [java-list] Iniciante Luiz Felipe Molina
- [java-list] Iniciante Willian Mascaro
