黑马程序员技术交流社区
标题:
Collections的sort方法为什么要实现Comparable接口?
[打印本页]
作者:
李建强
时间:
2012-9-28 11:05
标题:
Collections的sort方法为什么要实现Comparable接口?
本帖最后由 李建强 于 2012-9-28 11:55 编辑
jdk src文件夹中 java.util.Collections的源代码
sort方法(不带比较器)代码是:
public static <T extends Comparable<? super T>> void sort(List<T> list)
{
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++)
{
i.next();
i.set((T)a[j]);
}
}
复制代码
看代码是把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