Newsgroup: it.comp.java
Titolo: HashMap

Dovrei ordinare gli elementi di una HashMap in base a un campo che non
è quello chiave,
qualcuno sa come fare?
Ammesso che sia possibile...

Gli elementi in una hashmap non sono fatti per essere ordinati o
contenere elementi ordinati (per questo hai bisogno di un vettore o un
array) perchè hanno si al loro interno un array per memorizzare gli
elemnti, ma non è assolutamente detto che questi elementi seguano
l'ordine di inserimento e nemmeno che siano contigui... anzi, meno
contigui sono meglio funziona la hashmap, il cui scopo è memorizzare
un oggetto in base ad una chiave data; quindi mi spiace ma temo che
ordinare un HashMap sia davvero impossibile :-)
Cmq come ti ho detto puoi usare la classe Vector x fare tutto quello
che ti serve.

Ordinare direttamente la hashmap non e' possibile, proprio per come
sono fatte le hashmap, fatti restituire il set dei valori e poi ordini
quello

Gabry ha scritto:

prova a vedere 
http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeMap.html
oppure
http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedHashMap.html

> possibile...
M> prova a vedere
M> 
http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeMap.html
M> oppure
M> 
http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedHashMap.html
Ocio!
Il primo suggerimento č valido, il secondo non molto.
Mi  spiego. La  TreeMap ha  la  proprietą di  essere "sorted",  ovvero
l'iterazione sugli  elementi avviene seguendo  l'ordine naturale delle
chiavi.
In soldoni, se aggiungi alla mappa le coppie (chiave, valore):
    ("AAAA", "PIPPO")
    ("ZZZZ", "PLUTO")
    ("0000", "PAPERINO")
quando si  chiama il metodo  values() si ottiene  "PAPERINO", "PIPPO",
"PLUTO".
La  LinkedHashTable  ha  invece  quella di  essere  "ordered",  ovvero
l'iterazione sugli elementi avviene in ordine di inserimento.
Di nuovo in soldoni, se aggiungi alla mappa le coppie (chiave, valore):
    ("AAAA", "PIPPO")
    ("ZZZZ", "PLUTO")
    ("0000", "PAPERINO")
quando  si  chiama il  metodo  values()  si  ottiene PIPPO",  "PLUTO",
"PAPERINO"
Purtroppo  per Gabry  non puņ  usare il  trucco di  creare  la TreeMap
passandogli la  HashMap, ma  deve iterare sui  valori della  hashmap e
aggiungerli alla TreeMap uno per uno usando la nuova chiave.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

Grazie a tutti.
Alla fine ho optato per inserire gli elementi in una LinkedList e
sistemare tutto con quella..
Dall' inizio avevo pensato a questa possibilità, ma volevo sapere se
esisteva qualcosa di semplice 
con la HashMap.
Saluti

 
In realtà ottieni "PIPPO", "PAPERINO", "PLUTO". L'ordinamento avviene 
per la chiave, non per il valore.

> 
g> In realtà ottieni "PIPPO", "PAPERINO", "PLUTO". L'ordinamento avviene
g> per la chiave, non per il valore.
Anche se io mi sono spiegato male usando sempre il termine mappa senza
specificare quale,  non otterrai mai  l'ordine indicato da  te (guarda
attentamente il  testo del mio  post, se non  scopri il perché  c'è la
spiegazione in fondo in rot13).
Ottieni il sort per chiavi "PAPERINO", "PIPPO", "PLUTO" quando usi una
TreeMap, che  è sorted.  Ottinei  "PIPPO", "PLUTO", "PAPERINO"  con la
LinkedHashMap che è ordered.
Spiegazione crittata:
Onanyzragr.  Yn  puvnir cre  vy inyber CNCREVAB  pbafvfgr qv  frv mrev
(pbqvpr NFPVV  48) pur cerprqbab "nfpvorgvpnzragr" N.  Zrtyvb hfner ha
rqvgbe rq ha  sbag pur qvfgvathnab puvnenzragr gen 0, B,  1 r y dhnaqb
fv cebtenzzn.
Se hai problemi con rot13  (aka cifrario di Cesare), dillo che riposto
la soluzione in chiaro.
