Поскольку "10"
является лексикографически меньше, чем "2"
.
Вот подсказка:
Map<Integer,String> map = new TreeMap<Integer,String>();
map.put(10, "America");
map.put(1, "Australia");
map.put(2, "India");
map.put(11, "China");
System.out.println(map);
// {1=Australia, 2=India, 10=America, 11=China}
Вот еще один намек: String#compareTo(String)
против Integer#compareTo(Integer)
.
Не могли бы вы объяснить, что на самом деле вы подразумеваете под ""10 'лексикографически меньше, чем' 2 '".
Сначала прочитайте ссылку JavaDoc I, особенно первую ссылку.
Теперь давайте рассмотрим несколько простых сравнений строк:
- «a» явно предшествует «b»
- аналогично «b» предшествует «z»
Расширение не должно быть слишком большимэто для числовых символов:
- «0» предшествует «1»
- «1» предшествует «9»
Упорядочение отдельных символовТакие, как a
, b
, z
, 0
, 1
и 9
, называются их лексикографическим порядком .Короче говоря, каждый символ имеет числовое представление, которое вас не удивит.
Теперь давайте посмотрим на несколько более сложные сравнения строк:
- "aa" предшествует "bb "(это не должно вызывать удивления)
- " aa "также стоит перед" ab "
Как мы определили второй случай?Символ за символом.
1. "a" is the same character as "a", so we need to keep going
2. "a" comes before "b", so we're done.
Еще один пример: «ba» предшествует «c», поскольку «b» предшествует «c».
Давайте сделаем то же самое для строк, содержащихчисловые символы: