PDA

View Full Version : [java] ridefinizione hashcode su mappe


cavalieredimarte
25-06-2008, 15:27
Salve a tutti!
Vi pongo un lacerante dubbio su java, sto mappando su una hashmap 50 clienti du un supermerkato che possiedono la tessera soci...
il valore tessera soci (univoca) la uso come chiave della mappa, il mio questito è: quando ridefinisco hashcode, devo farlo solo sul campo chiave o anke su tutti gli altri campi?? ovvero:

cosi:

public int hashCode()
{
int val=1;
val=val + 31*tesseraCliente();
return val;
}

oppure

public int hashCode()
{
int val=1;
val=val + 31*tesseraCliente();
val=val + 31*nomeCliente();
val=val + 31*cognomeCliente();
return val;
}

banryu79
26-06-2008, 09:20
Da quello che ho capito io (da quello che ho letto, sarebbe più esatto) la risposta è: no, non è *necessario*.

No, perchè lo scopo della funzione hashCode() non ha nulla a che fare che quali/quanti membri un'istanza di una classe abbia al suo interno.
Alcune letture sull'argomento (HashMap/HashSet - hashCode method):

> 2005 :: Some insight into HashMap and hashCode (http://hioctane.blogspot.com/2005/09/some-insight-into-hashmap-and-hashcode.html)
> 2007 :: hashCode() pitfalls with HashSet and HashMap (http://javaadventure.blogspot.com/2007/02/hashcode-pitfalls-with-hashset-and.html)
> The Gemini Twins: equals and hashCode (http://mindprod.com/jgloss/hashcode.html)
> 2003 :: Java theory and practice: Hashing it out (http://www.ibm.com/developerworks/java/library/j-jtp05273.html)
> 2002 :: HashMap requires a better hashCode() - JDK 1.4 Part II (http://www.javaspecialists.co.za/archive/Issue054.html)