|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2002
Messaggi: 2518
|
[Java] Hasmap e containsKey
Salve a tutti,
se ho un hasmap dove la chiave è una mia classe Cella che si può contraddistingue univocamente da attibruti ovvero Latitudine e Longitudine che sono due double. Come faccio a dire che il containsKey di questa hasmap debba controllare appunto questi due valori di longitudine e latitudine? Perché di base sugli oggetti sembra che agisca solo sul riferimento, filava tutto liscio solo se lavoravo con chiavi di tipo primitivo. Vi ringrazio in anticipo, guylmaster |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
In Cella devi definire l'override dei metodi hashCode ed equals in modo appropriato.
Fonte: Quote:
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se usi classi custom come chiavi delle Collection devi fornire una adeguata implementazione dei metodi equals e hashCode.
Nel tuo caso, se l'identità di una istanza di Cella è univocamente definita dal valore di latitutdine e longitudine allora dovrai implementare equals e hashCode tenendo conto di questo, dunque dovrai dire che: 1) una Cella A equals un'altra Cella B se e solo se i valori latitudine e longitudine di A e di B sono tra loro uguali. 2) l'hashCode di una Cella è calcolato in base al valore di latitudine e longitune di quella Cella. 3) per quanto detto in 1 e 2 segue che se una Cella A equals un'altra Cella B allora l'hashCode di A deve essere uguale all'hashCode di B. In Java per dire queste tre cose devi implementare adeguatamente i metodi equals & hashCode; se non lo fai le istanze della tua classe Cella ereditano (ovviamente) i comportamenti definiti in Object. P.S.: dato che longitudine e latitudine sono dei double, nell'implementare equals e hashCode ti tornerà utile il metodo statico Double.doubleToLongBits (hashCode deve restituire un long). Inoltre puoi sbirciare i sorgenti di Double per vedere come implementa i suoi equals e hashCode, tu dovresti fare una cosa simile, solo che hai due double invece che uno
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 09-03-2012 alle 15:37. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:16.


















