2015-01-12 3 views
-4

У меня есть такой вопрос, как запись названия. Я хочу знать почему?Почему Java не поддерживает сортировку по значению?

сцена, если у меня есть карта, ключ означает id, значение означает оценку.

так, во-первых, я хочу отсортировать карту по количеству баллов. Во-вторых, я хочу получить верхние n (может быть 10) элементов после сортировки.

Я нахожу способ реализовать то, что я думаю. но меня смущает почему карта не поддерживает сортировку по значению?

Когда я использую Java, я пишу этот код сортируется HashMap:

public class SortedMapTest { 


    public static void main(String[] args) { 

     Map<Long, Double> scoreMap = new HashMap<>(); 
     scoreMap.put(100L, 3.0); 
     scoreMap.put(22L, 2.4); 
     scoreMap.put(45L, 2.0); 

     Map<Long, Double> sortedMap = new TreeMap<>(new ValueCompare(scoreMap)); 

     sortedMap.putAll(scoreMap); 

     System.out.println(sortedMap); 

    } 

    static final class ValueCompare implements Comparator<Long> { 

     private Map<Long, Double> map; 

     public ValueCompare(Map<Long, Double> map) { 
      this.map = map; 
     } 

     @Override 
     public int compare(Long o1, Long o2) { 
      Double d1 = map.get(o1); 
      Double d2 = map.get(o2); 
      return d2.compareTo(d1); 
     } 
    } 
} 
+6

Вы забыли спросить. – Maroun

+1

Каков ожидаемый результат? Каков фактический результат? – dcsohl

+0

Вы сами разместили здесь код, который сортируется по значению; почему вы говорите, что Java не может сортировать по значению? –

ответ

2

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

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

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

+0

Не могли бы вы рассказать мне другой способ получить отсортированную карту или отсортировать карту по заданной карте? –

Смежные вопросы