Risposta breve
Usa a TreeMap
. Questo è esattamente ciò che serve.
Se questa mappa ti viene passata e non è possibile determinare il tipo, è possibile effettuare le seguenti operazioni:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Questo ripeterà la mappa in ordine naturale delle chiavi.
Risposta più lunga
Tecnicamente, puoi usare tutto ciò che implementa SortedMap
, ma salvo rari casi questo equivale a TreeMap
, così come lo è di Map
solito usare un'implementazione HashMap
.
Per i casi in cui le tue chiavi sono di un tipo complesso che non implementa Comparable o non vuoi usare l'ordine naturale allora TreeMap
e TreeSet
hai costruttori aggiuntivi che ti permettono di passare in un Comparator
:
// placed inline for the demonstration, but doesn't have to be a lambda expression
Comparator<Foo> comparator = (Foo o1, Foo o2) -> {
...
}
SortedSet<Foo> keys = new TreeSet<>(comparator);
keys.addAll(map.keySet());
Ricorda quando usi a TreeMap
o TreeSet
che avrà caratteristiche prestazionali diverse da HashMap
o HashSet
. In parole povere, le operazioni che trovano o inseriscono un elemento passeranno da O (1) a O (Log (N)) .
In un HashMap
passaggio da 1000 elementi a 10.000 non influisce sul tempo di ricerca di un elemento, ma per un TreeMap
tempo di ricerca sarà circa 3 volte più lento (presupponendo Log 2 ). Il passaggio da 1000 a 100.000 sarà circa 6 volte più lento per ogni ricerca di elementi.