PDA

View Full Version : [JAVA] - Implementazione metodo equals


^TiGeRShArK^
09-06-2005, 14:15
ho uno dei soliti problemi apparentemente semplici ma ke non si riesce a capire perchè non funzionano......
Allora:
In una classe OrdineKey avente solo due campi Stringa come dati (numOrdine e dataOrdine) ho implementato il metodo equals x vedere se un elemento è già presente in una collection ke usa i generics:

public boolean equals(Object that){
if ( this == that ) return true;
if ( !(that instanceof OrdineKey) ) return false;
OrdineKey thatOrdineKey = (OrdineKey)that;
return numOrdine==thatOrdineKey.numOrdine && dataOrdine==thatOrdineKey.dataOrdine;
}

Ora, finkè inserisco nella collezione degli oggetti ke creo al volo e faccio un controllo con il metodo contains non ci sono problemi....
però se uso il metodo contains x controllare se un oggetto è presente nella lista all'interno di un while non funziona una mazza.... pensa sempre ke l'oggetto non è presente....
Ora mi kiedo.... è possibile ke debba implementare anke il metodo hashCode????
ma allora perchè quando inserisco manualmente oggetti diversi nella lista ma con i valori dataOrdine e numOrdine uguali questi mi vengono riconosciuti correttamente come già presenti??????

pela
09-06-2005, 14:36
sostituirei questo
return numOrdine==thatOrdineKey.numOrdine && dataOrdine==thatOrdineKey.dataOrdine;
con
return numOrdine.equals(thatOrdineKey.numOrdine) && dataOrdine.equals(thatOrdineKey.dataOrdine);

^TiGeRShArK^
09-06-2005, 14:39
:doh: è verò sono un coglione.....
mi ero dimenticato ke erano stringhe!!!
il bello è ke nella classe principale poco prima avevo giusto utilizzato .equalsIngoreCase x le stringhe! :muro::muro::muro:

theClimber
10-06-2005, 21:43
Ora mi kiedo.... è possibile ke debba implementare anke il metodo hashCode????


Si, devi ! ;)

La documentazione di hashcode() dice :

If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.

It is not required that if two objects are unequal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.


Se non ridefinisci hashcode(), finisci per usare la versione definita in java.lang.Object, che :


As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)


Se pero' non usi HashMap/HashTable o classi simili il metodo hashcode() non dovrebbe servirti

ciao