首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java TreeMap比较器

Java TreeMap比较器
EN

Stack Overflow用户
提问于 2012-10-18 12:24:00
回答 3查看 127.5K关注 0票数 35

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

代码语言:javascript
复制
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());
        } 
    });

我可以执行上述操作吗?

  • 我希望按值而不是myMap

对键进行排序

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-18 12:30:44

您不能对值对TreeMap进行排序。

基于红黑树的NavigableMap实现。地图根据其键的自然顺序进行排序,或者通过在地图创建时提供的比较器进行排序,这取决于所使用的构造函数,您将需要为Comparator<? super K>提供comparator,以便比较器应该对键进行比较。

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

代码语言:javascript
复制
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());

给你举个例子

代码语言:javascript
复制
    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);

输出:

代码语言:javascript
复制
  [d=2.0, b=9.0, a=10.0, c=11.0]
票数 68
EN

Stack Overflow用户

发布于 2012-10-18 12:27:10

比较器应该只针对键,而不是整个条目。它根据键对条目进行排序。

您应该将其更改为以下内容

代码语言:javascript
复制
SortedMap<String, Double> myMap = 
    new TreeMap<String, Double>(new Comparator<String>()
    {
        public int compare(String o1, String o2)
        {
            return o1.compareTo(o2);
        } 
});

更新

您可以执行以下操作(在映射中创建一个条目列表,并根据值对列表进行排序,但请注意,这不会对映射本身进行排序)-

代码语言:javascript
复制
List<Map.Entry<String, Double>> entryList = new ArrayList<Map.Entry<String, Double>>(myMap.entrySet());
    Collections.sort(entryList, new Comparator<Map.Entry<String, Double>>() {
        @Override
        public int compare(Entry<String, Double> o1, Entry<String, Double> o2) {
            return o1.getValue().compareTo(o2.getValue());
        }
    });
票数 17
EN

Stack Overflow用户

发布于 2017-08-23 06:20:49

你可以刷一下钥匙和价值。例如

代码语言:javascript
复制
        String[] k = {"Elena", "Thomas", "Hamilton", "Suzie", "Phil"};
        int[] v = {341, 273, 278, 329, 445};
        TreeMap<Integer,String>a=new TreeMap();
        for (int i = 0; i < k.length; i++) 
           a.put(v[i],k[i]);            
        System.out.println(a.firstEntry().getValue()+"\t"+a.firstEntry().getKey());
        a.remove(a.firstEntry().getKey());
        System.out.println(a.firstEntry().getValue()+"\t"+a.firstEntry().getKey());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12947088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档