2016-12-26 1 views
-1

У меня есть карта строковых ключей и значений int, я сортирую их и сохраняю их отсортированными при изменении значений. Я попробовал использовать treemap для отсортированных пар и нормальную карту для несортированного париса, чтобы я мог использовать его в компараторе, но после того, как одно значение передается другим, я получаю нулевое исчисление, это дефиниция:Как я могу получить treeMap, который сортируется по значению, сохраняя сортировку при изменении элементов?

public static TreeMap<String, Long> countryData; 
public static ValueComparator bvc; 

public static void setCountryData(HashMap<String, Long> map){ 
    bvc = new ValueComparator(map); 
    countryData = new TreeMap<String, Long>(bvc); 
    countryData.putAll(map); 
    System.out.println(Arrays.toString(countyNames)); 
    System.out.println(countryData.values()); 


} 

public static class ValueComparator implements Comparator<String> { 
    Map<String, Long> base; 

    public ValueComparator(Map<String, Long> base) { 
     this.base = base; 
    } 


    public int compare(String a, String b) { 
     if(base.get(a).equals(base.get(b))){ 
      return 0; 
     } 
     if (base.get(a) > base.get(b)) { 
      return -1; 
     } else { 
      return 1; 
     } 
    } 
} 

это то, как я могу изменить значение:

General.bvc.base.put(country, newValue); 
General.countryData.put(country, newValue); 

после одного значения проходит другой, и я пытаюсь Acces его, я получаю нуль, как я могу это сделать?

ответ

2

Как я могу иметь TreeMap, который отсортирован по значению ..

Вы не можете. Они сортируются по ключевым словам.

...

нерелевантные.

+0

, но я сделал собственный компаратор для сравнения значений. Если это неправильный путь, каков правильный путь? – Yovboy

+1

Если ваш пользовательский компаратор не возвращает заказ на клавиши, «TreeMap» не может работать. Это является нарушением контракта. Кроме того, обновление того, что используется в качестве ключа, также является нарушением контракта. Вы не можете этого сделать. – EJP

+0

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