当前位置: 代码迷 >> J2SE >> 有关java的Comparator有些疑问!该如何处理
  详细解决方案

有关java的Comparator有些疑问!该如何处理

热度:310   发布时间:2016-04-24 18:12:56.0
有关java的Comparator有些疑问!
请看下面的方法sortResults,里面有一个类型为treeset的局部变量,里面实现了comparator接口。我有一些疑问,请大家帮忙解答:
 1.为什么 sortedResults.add(new User(name,value))时会调用compare方法?是如何调用的?是不是每增加一个User,都要和sortedResults里面已经存在的User比较?
 2.在sortedResults里面new Comparator(),这种写法叫做什么?
Java code
private static void sortResults(Map results) {    TreeSet sortedResults = new TreeSet(        new Comparator(){            public int compare(Object o1, Object o2) {                User user1 = (User)o1;                User user2 = (User)o2;                if(user1.value<user2.value)                {                       return -1;                }else if(user1.value>user2.value)                {                    return 1;                }else                {                       return user1.name.compareTo(user2.name);                }            }        }    );    Iterator iterator = results.keySet().iterator();    while(iterator.hasNext())    {        String name = (String)iterator.next();        Integer value = (Integer)results.get(name);        if(value > 1)        {              sortedResults.add(new User(name,value));                    }    }        printResults(sortedResults);}



------解决方案--------------------
在sortedResults里面new Comparator(),这种写法叫做 内部类~~~你可以google一下 就知道了……
------解决方案--------------------
1.为什么 sortedResults.add(new User(name,value))时会调用compare方法?是如何调用的?是不是每增加一个User,都要和sortedResults里面已经存在的User比较?
 2.在sortedResults里面new Comparator(),这种写法叫做什么?

1:这个是集合里面的定义的,只要重写了这个compare方法,集合里面的元素就会以这个规则自动排列,这个是java自动调用的,如果要问原理,只有看JDK源代码了。

2:这个是TreeSet的一个构造方法,按照你给定的Comparator进行排序,你这里用到了匿名类实现了Comparator接口
------解决方案--------------------
关注下。
  相关解决方案