положить элемент в конец TreeMap - PullRequest
1 голос
/ 13 марта 2012

У меня есть древовидная карта, в которой я отсортировал элементы в порядке возрастания, например 0,1,2,3 и т. Д. Эти элементы отсортированы по их значениям, т. Е. 0,1,2 и т. Д. Являются значениями. Я использовал компаратор для отсортировать их ... Я хочу сохранить этот порядок, за исключением того, что я хочу поместить элемент со значением 0 в конце карты. Как это сделать?

Ответы [ 3 ]

5 голосов
/ 13 марта 2012

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

Что вы могли бы сделать, так это настроить ваш Comparator таким образом, чтобы он решал, что «0» является самым большим элементом, поэтому он будет сортировать все «0» до самого конца. Обратите внимание, что порядок «0» в конце будет случайным, в зависимости от алгоритма сортировки.

1 голос
/ 13 марта 2012

Только что понял, что вы хотите отсортировать на карте значения вместо keys . Компаратор не получает значения, что делает его немного сложнее. В подходе new используется вторая (несортированная) карта, которая просто собирает все значения и может использоваться компаратором для поиска значений для ключей:

private static Map<String, Integer> helper = new HashMap<String, Integer>();

private static Comparator<String> myComparator 
                  = new Comparator<String>() {
  public int compare(String s1, String s2) {
    Integer i1 = helper.get(s1);
    Integer i2 = helper.get(s2);

    if (i1 == 0) return  1; //  i1 > i2
    if (i2 == 0) return -1; //  i1 < i2

    return i1.compareTo(i2);
  } 
};

public static void main (String[] args) throws java.lang.Exception {
  helper.put("minus one", -1);
  helper.put("zero", 0);
  helper.put("one", 1);
  helper.put("very much", Integer.MAX_VALUE);
  helper.put("nothing", 0);
  helper.put("null", 0);

  Map<String, Integer> map = new TreeMap<String, Integer>(myComparator);
  map.putAll(helper);

  for(Map.Entry<String, Integer> entry:map.entrySet()) {
    System.out.printf("%s = %s%n", entry.getKey(), entry.getValue());
  }
}

Вывод:

minus one = -1
one = 1
very much = 2147483647
nothing = 0
zero = 0
null = 0
1 голос
/ 13 марта 2012

Вы можете изменить свой компаратор и рассматривать 0 как наибольшее число

...