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 Mapsolito 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 TreeMape TreeSethai 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 TreeMapo TreeSetche avrà caratteristiche prestazionali diverse da HashMapo HashSet. In parole povere, le operazioni che trovano o inseriscono un elemento passeranno da O (1) a O (Log (N)) .
In un HashMappassaggio da 1000 elementi a 10.000 non influisce sul tempo di ricerca di un elemento, ma per un TreeMaptempo 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.