Java TreeMap比较器

我需要一个TreeMap的比较器。我应该在TreeMap的构造函数中匿名编写此代码吗?我还能怎么写我的比较器。目前,Java不喜欢我的代码(我可以匿名这样做吗?):

SortedMap<String, Double> myMap = 

new TreeMap<String, Double>(new Comparator<Entry<String, Double>>()

{

public int compare(Entry<String, Double> o1, Entry<String, Double> o2)

{

return o1.getValue().compareTo(o2.getValue());

}

});

  1. 我可以匿名进行上述操作吗?
  2. 我还能怎么做?
  3. 我想按值而不是键对myMap进行排序

回答:

您无法根据值对TreeMap进行排序。

基于红黑树的NavigableMap实现。映射是根据其键的自然顺序或在映射创建时提供的Comparator进行排序的,具体取决于使用的是哪个构造函数。您需要提供comparatorComparator<?

super K>因此比较器应该在键上进行比较。

要提供对值的排序,您将需要SortedSet。用

SortedSet<Map.Entry<String, Double>> sortedset = new TreeSet<Map.Entry<String, Double>>(

new Comparator<Map.Entry<String, Double>>() {

@Override

public int compare(Map.Entry<String, Double> e1,

Map.Entry<String, Double> e2) {

return e1.getValue().compareTo(e2.getValue());

}

});

sortedset.addAll(myMap.entrySet());

举个例子

    SortedMap<String, Double> myMap = new TreeMap<String, Double>();

myMap.put("a", 10.0);

myMap.put("b", 9.0);

myMap.put("c", 11.0);

myMap.put("d", 2.0);

sortedset.addAll(myMap.entrySet());

System.out.println(sortedset);

输出:

  [d=2.0, b=9.0, a=10.0, c=11.0]

以上是 Java TreeMap比较器 的全部内容, 来源链接: utcz.com/qa/408583.html

回到顶部