日期:2014-05-20  浏览次数:20724 次

有关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接口
------解决方案--------------------
关注下。