黑马程序员技术交流社区
标题:
comparable接口和comparator接口的区别
[打印本页]
作者:
lyw@heima
时间:
2013-12-17 22:07
标题:
comparable接口和comparator接口的区别
如何区别comparable接口和comparator接口
作者:
yuehaotian
时间:
2013-12-17 22:13
comparable 是让元素自身具备比较性
comparator 是让一个类,描述所存元素的比较性 。俗称(比较器)
作者:
ζ丶凡σ
时间:
2013-12-17 22:16
Comparable接口:
1、lang包下的接口
2、自定义类实现此接口并定义好自身具备比较性。
3、需要覆盖的方法comparoTo();
Comparator接口:
1、util包下的接口
2、自定类不具备比较性时,单独定义一个比较器,实现此接口,交就此类对象传入TreeSet集合中作业构造参数。
3、需要覆盖的方法compare(); (本接口还有equals()方法,不必覆盖,因为自定义类已经继承了Object中的equals方法。)
作者:
belief丶Only
时间:
2013-12-19 16:43
1、Comparator在集合(即你要实现比较的类)外进行定义的实现,而Comparable接口则是在你要比较的类内进行方法的实现。这样看来Comparator更像是一个专用的比较器。
2、Comparator实现了算法和数据的分离,从代码也可以看出,其实这和第一点是相辅相成的,因为Comparable依赖于某一个需要比较的类来实现。
3、Comparable支持自比较,自比较是指比如String等类里面本身就有CompareTo()方法,直接就可以进行String类对象的比较,这也可以从较之Comparator,Comparable中Arrays.sort()方法中只带数组参数的形式与书上例子更相似这点看出。
4、从第3点延伸,我们可以看到当不满足于自比较函数,如String类时,我们试图改写规则要怎么办——通过Comparator因为它支持外比较,它是分离的。
5、当一个又一个类设计完成后,或许我们最初没有设想到类的比较问题,而没使用Comparable接口,那我们之后可以通过Comparator来完成,而同时无需改变之前完成的类的构建。
6、运用Arrays.sort()方法时,注意二者的参数不同,Comparator多了一个参数,这第二个参数是使用Comparator接口的那个被视为专用比较器的类的对象,如汪同学例子中的new ByWeightComparator()。
其实大部分情况下我们并不需要刻意去对二者做选择,哪个用得顺手就用哪个,但当你的习惯遭遇某种问题时,这样的区别分析可以让你不妨换个方向思考,不至于走入死胡同。
以上分析多是个人理解,如有纰漏,还望加以修正。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2