将元素放在TreeMap的末尾

时间:2012-03-13 07:43:20

标签: java collections treemap

我有一个树形图,其中我按升序排序元素,如0,1,2,3等。这些元素按其值排序,即0,1,2等是值。我使用了比较器排序他们。我想保留这个顺序,除了我想在地图的末尾放置0值的元素。怎么做?

3 个答案:

答案 0 :(得分:5)

正如您已经说过的,您的TreeMap已经排序,因此允许您在“end”附加元素是完全没有意义的,即使TreeMaps不能以这种方式工作。

你可以做的是以一种决定“0”是最大元素的方式配置你的比较器,所以他将所有“0”排序到最后。 请注意,根据排序算法,结尾处的“0”顺序是随机的。

答案 1 :(得分:1)

您可以修改比较器并将0视为最大数字

答案 2 :(得分:1)

刚才意识到,您要对地图进行排序,而不是。比较器没有获得使其更复杂的值。 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