A TreeMap
- это SortedMap
, который сортирует по ключам. То, как вы его использовали, у вас есть String
ключей, и его естественное упорядочение лексикографическое, где "11" < "2"
.
Вот иллюстрация, использующая List
для упрощения:
List<String> list = new ArrayList<String>(
Arrays.asList("2", "1", "11", "b", "a", "aa")
);
Collections.sort(list);
System.out.println(list); // prints "[1, 11, 2, a, aa, b]"
Обратите внимание на аналогию между 1, 11, 2
и a, aa, b
. Это именно то, что предписывает лексикографическое упорядочение. В словаре вы ожидаете, что aa
появится до b
. Аналогично, в этом порядке вы ожидаете, что 11
появится до 2
.
Смотри также
Если вам нужно сравнить их как Integer
, используйте пользовательский Comparator<String>
:
Comparator<String> stringAsInteger = new Comparator<String>() {
@Override public int compare(String s1, String s2) {
return Integer.valueOf(s1).compareTo(Integer.valueOf(s2));
}
};
List<String> list = new ArrayList<String>(
Arrays.asList("2", "1", "10", "007")
);
Collections.sort(list, stringAsInteger);
System.out.println(list); // prints "[1, 2, 007, 10]"
SortedMap<String, String> map = new TreeMap<String, String>(stringAsInteger);
map.put("2", "Two");
map.put("1", "One");
map.put("10", "Ten");
map.put("12", "Twelve");
map.put("7", "Seven");
System.out.println(map); // prints "{1=One, 2=Two, 7=Seven, 10=Ten, 12=Twelve}"
API ссылки
Смежные вопросы
Вкл. Comparator
и Comparable
При сортировке Map
по значениям
По сырым видам
Effective Java 2nd Edition, Item 23: Не используйте необработанные типы в новом коде
Смежные вопросы