Как использовать интерфейс SortedMap в Java? - PullRequest
61 голосов
/ 15 сентября 2011

у меня есть

 Map<Float, MyObject>

Каков наилучший способ сортировки карты по поплавку?

Является ли SortedMap лучшим ответом? TreeMap? Как мне это использовать?

Я создаю карту только один раз и часто заменяю MyObject, используя myMap.put() и myMap.get().

Ответы [ 5 ]

82 голосов
/ 15 сентября 2011

Я бы использовал TreeMap, который реализует SortedMap.Он предназначен именно для этого.

Пример:

Map<Integer, String> map = new TreeMap<Integer, String>();

// Add Items to the TreeMap
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");

// Iterate over them
for (Map.Entry<Integer, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " => " + entry.getValue());
}

См. страницу учебника Java для SortedMap .
И , здесь список учебных пособий относится к TreeMap.

42 голосов
/ 15 сентября 2011

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

т.е.

    Map<Float,String> mySortedMap = new TreeMap<Float,MyObject>();
    // Put some values in it
    mySortedMap.put(1.0f,"One");
    mySortedMap.put(0.0f,"Zero");
    mySortedMap.put(3.0f,"Three");

    // Iterate through it and it'll be in order!
    for(Map.Entry<Float,String> entry : mySortedMap.entrySet()) {
        System.out.println(entry.getValue());
    } // outputs Zero One Three 

Стоит взглянуть на api docs, http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html, чтобы узнать, что еще вы можете с ним сделать.

13 голосов
/ 08 сентября 2015

Вы можете использовать TreeMap, который внутренне реализует SortedMap, ниже приведен пример

Сортировка по возрастанию:

  Map<Float, String> ascsortedMAP = new TreeMap<Float, String>();

  ascsortedMAP.put(8f, "name8");
  ascsortedMAP.put(5f, "name5");
  ascsortedMAP.put(15f, "name15");
  ascsortedMAP.put(35f, "name35");
  ascsortedMAP.put(44f, "name44");
  ascsortedMAP.put(7f, "name7");
  ascsortedMAP.put(6f, "name6");

  for (Entry<Float, String> mapData : ascsortedMAP.entrySet()) {
    System.out.println("Key : " + mapData.getKey() + "Value : " + mapData.getValue());
  }

Сортировка по убыванию:

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

  // Create the map and provide the comparator as a argument
  Map<Float, String> dscsortedMAP = new TreeMap<Float, String>(new Comparator<Float>() {
    @Override
    public int compare(Float o1, Float o2) {
      return o2.compareTo(o1);
    }
  });
  dscsortedMAP.putAll(ascsortedMAP);

для получения дополнительной информации о SortedMAP читайте http://examples.javacodegeeks.com/core-java/util/treemap/java-sorted-map-example/

3 голосов
/ 15 сентября 2011

TreeMap, который является реализацией интерфейса SortedMap, будет работать.

Как его использовать?

Map<Float, MyObject> map = new TreeMap<Float, MyObject>();
2 голосов
/ 15 сентября 2011

TreeMap сортирует по ключевому естественному порядку.Ключи должны реализовывать Comparable или быть совместимыми с Comparator (если вы передали один экземпляр в конструктор).В вашем случае Float уже реализует Comparable, поэтому вам не нужно делать ничего особенного.

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

...