Короткий ответ
Используйте TreeMap
. Это именно то, для чего это.
Если эта карта передана вам, и вы не можете определить тип, то вы можете сделать следующее:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Это будет проходить по карте в естественном порядке ключей.
Более длинный ответ
Технически, вы можете использовать все, что реализует SortedMap
, но, за исключением редких случаев, это равнозначно тому TreeMap
, как Map
обычно используют реализацию HashMap
.
Для случаев , когда ключи представляют собой сложный тип , который не реализует Сопоставимые или вы не хотите использовать естественный порядок , то TreeMap
и TreeSet
есть дополнительные конструкторы , которые позволяют проходить в 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());
Помните, что при использовании TreeMap
или TreeSet
он будет иметь другие характеристики производительности, чем HashMap
или HashSet
. Грубо говоря, операции по нахождению или вставке элемента перейдут от O (1) к O (Log (N)) .
В действительности HashMap
, переход от 1000 элементов к 10000 на самом деле не влияет на ваше время поиска элемента, но TreeMap
время поиска будет примерно в 3 раза медленнее (при условии Log 2 ). Перемещение от 1000 до 100 000 будет примерно в 6 раз медленнее для каждого поиска элемента.
Предполагая, что TreeMap не подходит для вас (и что вы не можете использовать дженерики):
источник
С помощью
TreeMap
вы можете отсортировать карту.источник
Используйте TreeMap !
источник
Если у вас уже есть карта и вы хотите отсортировать ее по ключам, просто используйте:
Полный рабочий пример:
источник
Просто используйте TreeMap
Имейте в виду, что TreeMap сортируется в соответствии с естественным порядком его «ключей»
источник
При условии, что вы не можете использовать
TreeMap
, в Java 8 мы можем использовать метод toMap (),Collectors
который принимает следующие параметры:Пример Java 8
Мы можем изменить пример для использования собственного компаратора и сортировки по ключам следующим образом:
источник
Используя Java 8:
источник
Этот код может сортировать карту значения ключа в обоих порядках, то есть по возрастанию и по убыванию.
Например:
источник
В Java 8
Чтобы отсортировать
Map<K, V>
по ключу, поместите ключи вList<K>
:Чтобы отсортировать
Map<K, V>
по ключу, поместите записи вList<Map.Entry<K, V>>
:И последнее, но не менее важное: сортировка строк с учетом языка - используйте класс Collator (компаратор):
источник
источник
В Java 8 вы также можете использовать .stream (). Sorted ():
источник
Мы также можем отсортировать ключ с помощью метода Arrays.sort.
источник
На всякий случай, если вы не хотите использовать
TreeMap
Кроме того, в случае, если вы хотите отсортировать карту на основе
values
просто изменитьMap.Entry::getKey
наMap.Entry::getValue
источник