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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邢晏玮 中级黑马   /  2012-11-11 20:39  /  1655 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邢晏玮 于 2012-11-12 15:52 编辑

在java.lang包中的 接口 Comparable<T>和java.util包中的 接口 Comparator<T>有什么区别 在具体的用法上

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
接口 Comparable<T>和java.util包中的 接口 Comparator<T>
在功能上是类似的,Comparable是要实现compareTo()方法,需要一个参数;Comparator是要实现compare()方法,需要两个参数。
仅在参数个数就能看成这两个接口的应用场景。实现Comparable接口的对象自身具备比较性,即可以传入一个同类对象,进行比较。
而实现Comparator接口的类更像是一个第三方的比较器,它需要调用者传入2个参数,把2个参数进行比较。
至于选择哪一种,根据实际需要确定。当与集合类共同配合使用时,个人感觉使用Comparator更灵活一点。
举个例子,TreeSet类提供了一个排序的集合。当添加一个对象时,需要调用比较方法,以确定要添加的对象应该存放的位置。
若要实现此种功能,要么是让传入的对象具备比较性,即实现Comparable接口,也可以给TreeSet传入一个Comparator比较器。
这时若是使用Comparator比较器完全可以使用内部类完成,代码会较少。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王振 发表于 2012-11-11 21:02
接口 Comparable和java.util包中的 接口 Comparator
在功能上是类似的,Comparable是要实现compareTo()方法 ...

是不是也就是说自身不具备比较性的时候就可以用Comparator中的compare()方法
回复 使用道具 举报
邢晏玮 发表于 2012-11-11 21:09
是不是也就是说自身不具备比较性的时候就可以用Comparator中的compare()方法

是的  但是你要用此方法比较两个对象时,需要显式的调用。
比如Student s1 = new Student();    Student s1 = new Student();
比较大小时可以使用s1.compareTo(s2).返回值是int类型的值,为正则前面大,为负则前面小。
如果只是比较两个对象是否为同一对象,系统会默认调用equals()方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马