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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗全涛 黑马帝   /  2011-12-27 19:33  /  2308 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗全涛 于 2011-12-28 19:29 编辑

昨天看关于File文件视频的后,今天在网上找了个例子,String[] files = f.list();
然后 Arrays.sort(files)。查JDK我发现对基本数据都可直接用sort,而对于对象数组
则需要实现comparable接口(String类已实现comparable接口)。然后看资料的时
候又发现了一个comparator接口。有点晕了???谁对这两个有较深理解的帮我看
看吧??

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

4 个回复

倒序浏览
杨旭 黑马帝 2011-12-27 19:42:09
沙发
区别很简单

一个类实现了Camparable接口表明这个类的对象之间是可以相互比较的。如果用数学语言描述的话就是这个类的对象组成的集合中存在一个全序。这样,这个类对象组成的集合就可以使用Sort方法排序了。

而Comparator的作用有两个:
1,如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过Comparator来实现比较算法进行排序
2,为了使用不同的排序标准做准备,比如:升序、降序或其他什么序

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
comparable接口是让对象具备比较性。继承该接口的对象也就具备了比较性,在set集合中变现比较突出。如果你第一次写程序的时候是按照给对象的某一个属性进行的比较,但是过了N久之后,又需要改变比较条件,这个时候如果是改源代码中的compareTo方法可以实现。但是不建议修改原有代码,这个时候可以使用comparator,定义一个比较器。需要的时候把该比较器直接传递给某一个框架。在进行对象相等比较时,就会优先选用comparator定义的比较器。有了比较器的使用代码更灵活,更安全,也比较方便,比较策略不同时,定义一个比较器就OK了,保证了源代码的完整性。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
付星 黑马帝 2011-12-28 17:16:23
报纸
Comparale 接口只有一个方法: compareTo(Object obj)方法, 而Comparator接口,有两个方法:compare(Object obj1,Object obj2)和equals(Object obj)
在Comparator中的compare方法里面,要对两个参数的类型进行检查,而Comparable中的compareTo只对一个参数进行检查
对于Comparator的equals方法,一般来说不用重写,而直接用基类Object的已经能满足大多数的需求,在这里推荐不要重写
Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法
选择哪种方案:
1. 对于Comparale比较简单而且需要比较少的工作,而且在用到TreeSet或TreeMap时,构造器不用带参数,且能每次都能用相同的的比较方法,如果用Comparable能达到目的,就最好用Comparable接口
2. 对于Comparator接口比较灵活,而且要更多一点的工作,能通过实现Comparator接口来产生很多不一样的类,而且能方便按其他的字段进行排序,同时对于基本类型数组无法用Comparator进行排序,只能用于对象的排序

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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