黑马程序员技术交流社区

标题: Collections的sort方法为什么要实现Comparable接口? [打印本页]

作者: 李建强    时间: 2012-9-28 11:05
标题: Collections的sort方法为什么要实现Comparable接口?
本帖最后由 李建强 于 2012-9-28 11:55 编辑

jdk src文件夹中 java.util.Collections的源代码
sort方法(不带比较器)代码是:
  1. public static <T extends Comparable<? super T>> void sort(List<T> list)
  2. {
  3. Object[] a = list.toArray();
  4. Arrays.sort(a);
  5. ListIterator<T> i = list.listIterator();
  6. for (int j=0; j<a.length; j++)
  7. {
  8. i.next();
  9. i.set((T)a[j]);
  10. }
  11. }
复制代码
看代码是把list转为数组,然后数组排序,接下来把数组元素存入集合。
但是为什么要实现Comparable接口,貌似没用到?

补充一下:这里面没用到compareTo()方法,怎么知道我怎么排的序?默认什么的根本解释不了。
作者: 黄敏    时间: 2012-9-28 11:15
集合最大的好处就是对存入的对象元素进行比较   而实现Comparable接口就是为了让集合中的对象元素进行具体的比较排序出来
作者: 翁鹏    时间: 2012-9-28 11:29
本帖最后由 翁鹏 于 2012-9-28 11:34 编辑

实现Comparable接口的原因是让元素间的比较有个标准,你想想两个元素要进行比较,但是没有比较的标准,就无所适从了。

例如:a 和 b 比较,有的人说a>b,有的人说a<b,有的人说a=b  ......  他们是怎么得出结果的呢!  因为他们自己心里有自己的比较标准。 如果没有标准,你想怎么说都可以,其实就是什么都比较不出来。
作者: 夏天    时间: 2012-9-28 11:33
sort的排序功能是自然排序,比如整数是按大小,字符串是按字典表排序。

而你如果想实现自己的排序,就必须重写Comparable接口。

比如你的list集合里面存的是人,有名字和地址。不实现Comparable接口,sort不知道如何排序。

所以须自己指定个排序方法

作者: 汪小照    时间: 2012-9-28 11:43
实现Comparable接口是为了让对象具备可比较性,一个对象如果不具备比较性,还排个什么的序呢?哥们,你说是吧!
所以一个对象在调用这个排序方法时,是具备比较性的,调的才有意义。


ps:版主,来点技术分吧,最近对这比较饥渴!

作者: 陈琦    时间: 2012-9-28 11:55
当你使用sort方法时,java内部默认去找compareable定义的标准,你可能觉得像int double这种基本类型都不需要写实现接口,但是基本类型数据自动打包后,都默认的实现了compareble接口,例如:类 Integer  方法:public int compareTo(Integer anotherInteger);(所有已实现的接口:Serializable, Comparable<Integer>)。




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