Как отсортировать ключ карты - PullRequest
1 голос
/ 06 января 2011

Как отсортировать (любой вид сортировки) ключ карты (древовидную или хэш-карту)

У меня проблема, и она выглядит следующим образом.

У меня есть карта сключ

27527-683,
27525-1179,
27525-1571,
27525-1813,
27525-4911,
27526-1303,
27526-3641,
27525-3989,
27525-4083,
27525-4670,
27526-4102,
27526-558,
27527-2411,
27527-4342

это список ключей, а значение для каждого ключа является списком.
Теперь, как мне отсортировать этот ключ в порядке возрастания по номеру.

отл.если я хочу отсортировать: 1,2,11,20,31,3,10
я хочу получить в качестве вывода: 1,2,3,10,11,20,31
но когда я используюавтосортировка дерева карт выводит: 1,10,11,2,20,3,31

как я могу отсортировать его в порядке возрастания по цифре?
пожалуйста, помогите мне.я не могу больше думать о способах, потому что это моя первая карта и список обработки времени

Ответы [ 4 ]

1 голос
/ 06 января 2011

Ваши ключи - строки.Естественное упорядочение строк лексикографическое.Вам нужно либо указать собственный компаратор в конструкторе TreeMap, либо использовать ключ Integer.

Более того, вы можете лучше представить Map<Key, List<Value>> как Google Guava Multimap, см., Например, SortedSetMultimap .

Продолжение примера Guava:

Multimap<Integer, Person> multimap = SortedSetMultimap.create(Ordering.natural(), Ordering.arbitrary());
multimap.put(1, x);
multimap.put(1, y);
multimap.put(2, z);
multimap.put(1, a);

Затем

multimap.get(1) вернет набор, содержащий [x, y, a]какой-то произвольный порядок.multimap.keys() вернет отсортированный набор [1, 2].

0 голосов
/ 06 января 2011

Ваши ключи в настоящее время являются строками, которые вы, скорее всего, обрабатываете как целые числа.Вам нужно будет переформулировать то, как вы обрабатываете объект карты, как предложили многие люди (это может быть правильный метод).Более простой способ заключается в использовании списка ключей, в который вы скопировали нас.

Я вижу, что есть способ вывести список ключей.Сортируйте это как хотите.Массивы и списки легко сортируются встроенными командами из вашей среды выполнения.Возможно, вам придется сначала разбить эти элементы на дефис.

Я бы порекомендовал книгу о структурах данных.

0 голосов
/ 06 января 2011

ключевое слово: SortedMap

SortedMap<Integer, Integer> s = new TreeMap<Integer, Integer>();

s.put(1, 1);
s.put(4, 2);
s.put(2, 3);
System.out.println(s); //{1=1, 2=3, 4=2}

также посмотрите на этот пример

0 голосов
/ 06 января 2011

Используйте SortedMap , например , java.util.TreeMap.

...