Подтвердить что ты не робот

Как я могу сортировать ключи карты в Java?

Это очень простой вопрос, я просто не так хорош с Java. У меня есть карта, и я хочу получить список или что-то из ключей в отсортированном порядке, чтобы я мог перебирать их.

4b9b3361

Ответ 1

Используйте TreeMap, который является реализацией интерфейса SortedMap. Он представляет свои ключи в отсортированном порядке.

Map<String, Object> map = new TreeMap<String, Object>();
/* Add entries to the map in any order. */
...
/* Now, iterate over the map contents, sorted by key. */
for (Map.Entry<String, ?> entry : map.entrySet()) {
  System.out.println(entry.getKey() + ": " + entry.getValue());
}

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

void process(Map<String, Object> original) {
  Map<String, Object> copy = new TreeMap<String, Object>(original);
  /* Now use "copy", which will have keys in sorted order. */
  ... 
}

A TreeMap работает с любым типом ключа, который реализует интерфейс Comparable, помещая их в свой "естественный" порядок. Для ключей, которые не являются Comparable, или чей естественный порядок не то, что вам нужно, вы можете реализовать свой собственный Comparator и указать что в конструкторе .

Ответ 2

У вас есть несколько вариантов. Перечислено в порядке предпочтения:

  • Используйте SortedMap:
    SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
    Это намного предпочтительнее, если вы хотите повторять несколько раз. Он держит ключи отсортированными, поэтому вам не нужно сортировать их перед итерацией.
  • Нет # 2.
  • Нет и # 3.
  • SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
  • List<whatever> keys = new ArrayList<whatever>(myMap.keySet()); Collections.sort(keys);

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

Ответ 3

Вы можете создать отсортированную коллекцию при повторении, но имеет смысл иметь отсортированную карту в первую очередь. (Как уже было предложено)

Все равно, вот как вы это делаете.

Map<String, Object> map;
for(String key: new TreeSet<String>(map.keySet()) {
  // accessed in sorted order.
}