Это возвращает мне вопросы в виде строки, но они расположены не по порядку.
Переведено автоматически
Ответ 1
Краткий ответ
Используйте a TreeMap. Именно для этого он и предназначен.
Если эта карта передана вам и вы не можете определить тип, то вы можете сделать следующее:
SortedSet<String> keys = newTreeSet<>(map.keySet()); for (String key : keys) { Stringvalue= map.get(key); // do something }
Это приведет к повторению по карте в естественном порядке следования ключей.
Более длинный ответ
Технически вы можете использовать все, что реализует SortedMap, но, за исключением редких случаев, это равносильно TreeMap, точно так же, как использование Map реализации обычно равно HashMap.
Для случаев, когда ваши ключи представляют собой сложный тип, который не реализует Comparable, или вы не хотите использовать естественный порядок, тогда TreeMap и TreeSet есть дополнительные конструкторы, которые позволяют передавать в Comparator:
// placed inline for the demonstration, but doesn't have to be a lambda expression Comparator<Foo> comparator = (Foo o1, Foo o2) -> { ... }
Помните при использовании TreeMap or TreeSet, что его характеристики производительности будут отличаться от HashMap or HashSet. Грубо говоря, операции, которые находят или вставляют элемент, будут переходить от O (1) к O (Log (N)).
В a HashMap переход от 1000 элементов к 10000 на самом деле не влияет на время поиска элемента, но для a TreeMap время поиска будет примерно в 1,3 раза медленнее (при условии, что Log2). Переход от 1000 к 100 000 будет примерно в 1,6 раза медленнее при поиске каждого элемента.
Ответ 2
Предполагая, что TreeMap вам не подходит (и предполагая, что вы не можете использовать generics):
List sortedKeys=newArrayList(yourMap.keySet()); Collections.sort(sortedKeys); // Do what you need with sortedKeys.