Проблема при сортировке карты

1

У меня есть карта

Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(21,"A");
map.put(9,"B");
map.put(23,"C");
map.put(25,"D");

Я так сортировал это

List<Integer> list = new LinkedList(map.keySet());
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
    return o1%10 - o2%10;
  }
});
Map sortedMap = new LinkedHashMap();
for(Integer key: list){
  sortedMap.put(key, map.get(key));
}
System.out.println(sortedMap);

Дает выход {21=A, 23=C, 25=D, 9=B}

Даже пробовал вот так

Collections.sort(list);
Set set = map.entrySet();
Map result = new LinkedHashMap();
for (Iterator it = set.iterator(); it.hasNext();) {
    Map.Entry entry = (Map.Entry)it.next();
    result.put(entry.getKey(), entry.getValue());
}
System.out.println(result.toString());

Еще такой же результат

Почему 9 приходит, наконец, это первая запись.

  • 0
    потому что 9 самый большой в одном месте всех чисел !!! вы сравниваете последнюю цифру всех чисел ...
  • 0
    Потому что ты просил об этом! Если явно указать % 10 , вы сохраните только последнюю цифру своих чисел для сортировки. :)
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Функция сравнения сравнивает только последнюю цифру каждого номера:

@Override
public int compare(Integer o1, Integer o2) {
    return o1 % 10 - o2 % 10; // a number modulo 10 yields it last digit, e.g. 25 % 10 = 5
  }
});

Вы сравниваете последние цифры (21, 9, 23, 24), которые (1, 9, 3, 4). Таким образом, 9 является наибольшим числом и, следовательно, последним в списке.

1

Попробуй это !

 List<Integer> list = new LinkedList(map.keySet());
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });

Есть ли какая-то конкретная причина для использования - %? Который меняет порядок результата.

Это результат выше

{9=B, 21=A, 23=C, 25=D}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню