Se basta dichiarare una mappa in questo modo:
def m = [:]
Quindi, si può vedere Groovy di default fa una LinkedHashMap
assert m.getClass().name == 'java.util.LinkedHashMap'
Se si guarda al documentation for LinkedHashMap si dice:
tabella hash e collegato elenca l'implementazione dell'interfaccia Map, con un ordine di iterazione prevedibile. Questa implementazione differisce da HashMap in quanto mantiene una lista doppiamente collegata che attraversa tutte le sue voci. Questo elenco collegato definisce l'ordine di iterazione, che è normalmente l'ordine in cui le chiavi sono state inserite nella mappa (ordine di inserimento).
Così LinkedHashMap
ha un ordine, e si può influire su tale ordine in Groovy chiamando sort
def m = [ b:1, a:2 ]
// Sort by descending value
m = m.sort { -it.value }
println m // prints [a:2, b:1]
Se volete ordinamento naturale delle chiavi, quindi è possibile utilizzare una delle mappe ordinate di Java, come ad come TreeMap
dire che si desidera utilizzare questo in Groovy, si può fare:
// def tm = [ tim_yates:1, F21:2 ] as TreeMap // works as well
TreeMap tm = [ tim_yates:1, F21:2 ]
Poi la stampa di questo, si può vedere che è ordinato dai tasti:
println map // prints [F21:b, tim_yates:a]
Un TreeMap
sarà mantenere l'ordine quando si aggiungono le chiavi. A LinkedHashMap
non rimarrà automaticamente ordinato quando si aggiungono nuovi valori.