请看下面的方法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接口
------解决方案--------------------
关注下。