Ho una Hashtable nella classe Gioco che ha come chiave un'altra classe Coordinata.
grigliaGioco.put(new Coordinate(0,0), pila).
Il mio problema è come faccio a recuperare poi la chiave??
grigliaGioco.get(????).
Grazie
Ho una Hashtable nella classe Gioco che ha come chiave un'altra classe Coordinata.
grigliaGioco.put(new Coordinate(0,0), pila).
Il mio problema è come faccio a recuperare poi la chiave??
grigliaGioco.get(????).
Grazie
Quando usi un array associativo, e hashtable lo è, la classe che fa da chiave deve implementare il metodo equals altrimenti java non è in grado di capire se due istanze rappresentano lo stesso valore.
Fatto questo, potrai recuperare il record in questo modo:
Detto questo, non sarebbe meglio usare i contenitori generics come HashMap? Almeno avresti il controllo dei tipi.codice:grigliaGioco.get(new Coordinate(0,0));
...
puntualizzo solo una cosa: usando le Collection e Map è bene per chiavi/valori implementare sempre i metodi equals e hashcode (e qui puoi leggere tanti documenti in rete sull'argomento e su come implementarli): è usare questi due metodi insieme che assicura l'unicità di un oggetto, non solo equals!Originariamente inviato da Caiodark
Quando usi un array associativo, e hashtable lo è, la classe che fa da chiave deve implementare il metodo equals altrimenti java non è in grado di capire se due istanze rappresentano lo stesso valore.
Fatto questo, potrai recuperare il record in questo modo:
codice:grigliaGioco.get(new Coordinate(0,0));
Non è obbligatorio implementare equals e hashcode con i valori di una Map, anche se io preferisco comunque metterci la mia implementazione per evitare casini quando da una hashmap faccio
riguardo i generics...in realtà quell'operazione che hai scritto non crea problemi anche se la fai senza usare i generics. L'uso dei generics ti torna utile quando fai operazioni di insert perché il compilatore fa un controllo sul tipo che passi o di get perché il compilatore controlla il tipo a cui assegni il risultato della get (evitando in alcuni casi dei cast o odiosi instanceof), ma se per curiosità tu mettessi Object come tipo dei generics (e lo puoi fare), a parte eventuali warning, vedi che il codice esegue correttamente e ti segnala in alcuni punti (tipo get) la richiesta di un cast esplicito.codice:mappa.values();
HashMap non è un contenitore generics, ma una implementazione di Map, sarebbe utile definire così:
se non ricordo male da java 7 (devo provare perché uso pesantemente la versione 6) puoi anche fare questocodice:Map<TitoChiave, TipoValore> mappa = new HashMap<TipoChiave, TipoValore>();
e non perdi le info sui generics (la seconda è da verificare)codice:Map<TitoChiave, TipoValore> mappa = new HashMap();
RTFM Read That F*** Manual!!!
Che è esattamente quello che sta cercando di fare, inserire e recuperare valori da una map.Originariamente inviato da valia
riguardo i generics...in realtà quell'operazione che hai scritto non crea problemi anche se la fai senza usare i generics. L'uso dei generics ti torna utile quando fai operazioni di insert perché il compilatore fa un controllo sul tipo che passi o di get perché il compilatore controlla il tipo a cui assegni il risultato della get
Ma è meglio che rimanga una curiosità, è una pessima idea rinunciare al controllo dei tipi a compile time.ma se per curiosità tu mettessi Object come tipo dei generics (e lo puoi fare), a parte eventuali warning, vedi che il codice esegue correttamente e ti segnala in alcuni punti (tipo get) la richiesta di un cast esplicito.
...
Tenendo presente tutto quello che già ti hanno detto, rispondo alla tua domanda (che non mi pare l'abbia ancora fatto qualcuno).Originariamente inviato da loma
Il mio problema è come faccio a recuperare poi la chiave??
grigliaGioco.get(????).
Al di là del fatto che non si sa bene cosa voglia dire "recuperare una chiave" (visto che, solitamente, è tramite una chiave che si "recupera" un valore), tutte le Map mettono a disposizione il metodo keySet() che restituisce, appunto, il set di chiavi contenute nella mappa.
Esempio:
Ciao.codice:HashMap<String,Integer> miaMamma = new HashMap<String,Integer>(); ... // popolo la mappa // Ottengo l'elenco di tutte le chiavi memorizzate nella mappa Set<String> keys = miaMappa.keySet(); // Scorrendo il set di chiavi, recupero tutti i valori: for(String key : keys) { System.out.println(key + ": " + miaMappa.get(key)); }![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Grazie a tutti per le risposte.. ho risolto mi bastava implementare l'hashcode e il metodo equals nella classe Coordinate che uso come chiave.