黑马程序员技术交流社区

标题: comparetor 与comparable接口有什么区别? [打印本页]

作者: danmo    时间: 2014-8-24 23:53
标题: comparetor 与comparable接口有什么区别?
在java基础视频中,集合框架中两个接口的区别?
作者: 依然超级赛亚人    时间: 2014-8-25 06:45
本帖最后由 依然超级赛亚人 于 2014-8-25 06:56 编辑

我感觉简单来说,使用方法和作用方式上有两点不同:
1.Comparable接口需要被进行比较的类去实现,实现之后是按照这个类自己定义的比较方法去比较;
2.Comparator接口也需要参与比较的类去实现,重写一下它的compare方法,然后把它的对象作为TreeSet或TreeMap的构造函数的参数传进去就好了,这个比较就是TreeSet或TreeMap的比较了,主导权在它们这。而且即使已经用Comparable实现比较的前提下也能接着用Comparator比较,并且以它为主。
作者: zuochbd    时间: 2014-8-25 08:22
从名字上面来看:
comparable接口, 代表的是一种能力.
      如果一个类实现了这个接口, 这个类就有这种能力.
comparetor接口, 代表的是一种因子, 比较用到的因子.
      所以, 其是直接注册给集合的.
作者: 华谦    时间: 2014-8-25 08:41
实现comparable,是为了让元素自身具备比较性
而实现comparetor是为了自定义自己的一个比较器,这是我的一个比较简单的理解
作者: lfs454766767    时间: 2014-8-25 09:06
百度的,希望能帮助你,这个说的很详细。
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
Comparator位于包java.util下,而Comparable位于包   java.lang下
Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口)   
自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,如API所说:
Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface
这里的自然顺序就是实现Comparable接口设定的排序方式。
而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2