A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁永志 中级黑马   /  2013-8-5 10:03  /  1177 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-6 21:44 编辑

昨天看到一段代码
  1. import java.util.Arrays;
  2. import java.util.Comparator;

  3. public class StaticInnerClassDemo {
  4.     public static void main(String[] args) {
  5.         String[] names = {"你","你妹","你妹妹"};
  6.         Arrays.sort(names, new ByLength());
  7.         System.out.println(Arrays.toString(names));
  8.     }
  9.     static class ByLength implements Comparator<String> {
  10.         public int compare(String o1, String o2) {
  11.            return o2.length() - o1.length();
  12.         }
  13.     }
  14. }
复制代码
有两个问题请教下大家。
上面代码Arrays.sort(names, new ByLength())为什么会调用compare函数
然后。函数又是怎么对names数组进行排序的呢 .?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

3 个回复

倒序浏览
通过查阅API文档,发现在Arrays类中,有这么个方法static <T> void sort(T[] a, Comparator<? super T> c) ,不知道楼主学到泛型没有,没学到的话可以先把<>中的东西去掉来理解,当调用这个sort方法时,该方法就会使用给定的比较器(自动调用compare方法)对传入的数组进行排序。
代码中,ByLength类实现了Comparetor借口,也就是一个比较器,compare方法的使用也可以通过查阅API文档来理解,当传入的第一个参数大于、等于或小于第二个参数时,分别返回正数、0、和负数。ByLength类重写了compare方法,按字符串长短进行排序。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
魏先勇 发表于 2013-8-5 11:26
通过查阅API文档,发现在Arrays类中,有这么个方法static  void sort(T[] a, Comparator ...

谢谢阿,
回复 使用道具 举报

不客气,一起努力!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马