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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李建强 于 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()方法,怎么知道我怎么排的序?默认什么的根本解释不了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
集合最大的好处就是对存入的对象元素进行比较   而实现Comparable接口就是为了让集合中的对象元素进行具体的比较排序出来
回复 使用道具 举报
本帖最后由 翁鹏 于 2012-9-28 11:34 编辑

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

例如:a 和 b 比较,有的人说a>b,有的人说a<b,有的人说a=b  ......  他们是怎么得出结果的呢!  因为他们自己心里有自己的比较标准。 如果没有标准,你想怎么说都可以,其实就是什么都比较不出来。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
sort的排序功能是自然排序,比如整数是按大小,字符串是按字典表排序。

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

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

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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
实现Comparable接口是为了让对象具备可比较性,一个对象如果不具备比较性,还排个什么的序呢?哥们,你说是吧!
所以一个对象在调用这个排序方法时,是具备比较性的,调的才有意义。


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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马