Как использовать интерфейс SortedMap в Java?
у меня есть
Map<Float, MyObject>
Каков наилучший способ сохранить карту отсортированной по поплавку?
Является ли SortedMap
лучшим ответом? TreeMap
? Как мне это использовать?
Я создаю карту только один раз и часто myMap.put()
MyObject
используя myMap.put()
и myMap.get()
.
Ответы
Ответ 1
Я бы использовал 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.
Ответ 2
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, чтобы узнать, что еще вы можете с ним сделать.
Ответ 3
Вы можете использовать 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/
Ответ 4
TreeMap, являющийся реализацией интерфейса SortedMap, будет работать.
Как его использовать?
Map<Float, MyObject> map = new TreeMap<Float, MyObject>();
Ответ 5
TreeMap
сортирует по естественному упорядочению. Ключи должны реализовывать Comparable
или быть совместимыми с Comparator
(если вы передали один экземпляр конструктору). В этом случае Float
уже реализует Comparable
, поэтому вам не нужно ничего делать.
Вы можете вызвать keySet
, чтобы получить все ключи в порядке возрастания.