黑马程序员技术交流社区

标题: 还是String 问题。... [打印本页]

作者: 丁永志    时间: 2013-8-5 10:03
标题: 还是String 问题。...
本帖最后由 杨兴庭 于 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数组进行排序的呢 .?

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

作者: 丁永志    时间: 2013-8-5 20:48
魏先勇 发表于 2013-8-5 11:26
通过查阅API文档,发现在Arrays类中,有这么个方法static  void sort(T[] a, Comparator ...

谢谢阿,
作者: masterV    时间: 2013-8-6 12:57
丁永志 发表于 2013-8-5 20:48
谢谢阿,

不客气,一起努力!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2