Сортировка карты дерева

У меня есть этот кусок кода:

private final static TreeMap<String, UserNotification> USER_NOTIFICATION_MAP = new TreeMap<String, UserNotification>();

//Filling the map using services

String idString = "1";
Iterator it = USER_NOTIFICATION_MAP.entrySet().iterator();
while (it.hasNext()) 
{
    Map.Entry pairs = (Map.Entry)it.next();
    idString = pairs.getKey().toString();   
    System.out.println(idString);
}   

Для карты со следующими парами: 2 - UserNotification, 3 - UserNotification, 4 - UserNotification, 5 - UserNotification, 6 - UserNotification, 7 - UserNotification, 8 - UserNotification, 9 - UserNotification, 10 - UserNotification

вывод из кода: 10 2 3 4 5 6 7 8 9

Как это возможно, учитывая тот факт, что TreeMap сортирует все данные по своим ключам? Я предполагаю, что ключ со значением 10 должен быть в конце списка.


person omegasbk    schedule 01.08.2014    source источник


Ответы (3)


TreeMap сортируется на основе своих ключей лексикографически (в алфавитном порядке), поэтому все, что начинается с 1, предшествует всему, что начинается с 2 и т. д.

Если вы хотите отсортировать карту по числовому номеру, используйте TreeMap<Integer, UserNotification>

person Andrew Stubbs    schedule 01.08.2014

Вы используете сравнение строк, а не целое число. Итак, «10» стоит перед «2».

person kulatamicuda    schedule 01.08.2014
comment
О, кажется, Андрей ответил несколько сек. передо мной :) - person kulatamicuda; 01.08.2014
comment
Это было быстро, да! :) - person omegasbk; 01.08.2014

Это происходит потому, что вы используете Strings в своем наборе ключей.

Следовательно, Strings отсортированы по лексикографическому порядку, следовательно, 10 предшествует 2.

Используйте Integers (или Longs), чтобы иметь предполагаемый порядок.

person Mena    schedule 01.08.2014