2012-05-22 10 views
361

Sto usando un HashMap. Quando eseguo un'iterazione sulla mappa, i dati vengono restituiti in ordine casuale (spesso lo stesso). Ma i dati sono stati inseriti in un ordine specifico e ho bisogno di mantenere l'ordine di inserimento. Come posso fare questo?Come conservare l'ordine di inserzione in HashMap?

+11

http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html –

risposta

813

LinkedHashMap è esattamente quello che stai cercando.

È esattamente come HashMap, con la differenza che quando si esegue iterazione su di esso, vengono visualizzati gli articoli nell'ordine di inserimento.

+6

in base al documento java si dice: questo elenco collegato definisce l'ordine di iterazione, che è normalmente l'ordine in cui le chiavi sono state inserite nella mappa. NORMALMENTE ????? cosa significa? l'inserimento dell'ordine non è garantito .... – Xenione

+14

@Xenione: Puoi scegliere tra l'ordine di inserimento e l'ordine di accesso. Vedere l'ultimo argomento per http://bit.ly/1jZXlCl – NPE

+6

@Xenione [Si noti che l'ordine di inserimento non è influenzato se una chiave viene reinserita nella mappa], quando una chiave viene messa due volte la seconda la muta non cambia l'ordine così iterativo non è esattamente l'ordine di inserimento a causa della unicità delle chiavi; normalmente significa che se le chiavi sono univoche i costruttori –

48

HashMap è ordinata per la seconda linea della documentazione:

Questa classe non fornisce alcuna garanzia per quanto riguarda l'ordine della mappa; in particolare, non garantisce che l'ordine rimanga costante nel tempo.

Forse si può fare come suggerisce aix e utilizzare uno LinkedHashMap o un'altra raccolta ordinata. This link can help you find the most appropriate collection to use.