黑马程序员技术交流社区

标题: comparator 和 comparable什么时候用? [打印本页]

作者: 黑马—王宁    时间: 2012-4-16 15:43
标题: comparator 和 comparable什么时候用?
comparator 和 comparable什么时候用,有什么时候不同,请高手指点?
作者: 刘占月    时间: 2012-4-16 15:48
comparable 是按照自然排序的方式进行排序的。
comparator 是自己定义一个比较器,可以按照自己想要的比较方式进行比较。
作者: 陈超    时间: 2012-4-16 15:55
两个都是进行比较的接口。
当我们需要对对象进行比较排序时,我们首先考虑的是对象的自然顺序,也就是对象所属类实现Comparable接口,
当类实现的comparable接口中的实现方式不是我们想要的排序方式时,我们可以定义一个类(比较器)实现Comparator接口,
不同:自然排序只能有一种,实现Comparable接口。而比较器我们可以定义多个。
作者: τ、高童鞋ゝ    时间: 2012-4-16 16:38
comparable是通用的接口,用户可以实现它完成自己特定的比较,一个类实现了comparable接口表明这个类的对象之间是可以相互比较的。

comparator可以理解为一种算法的实现,在需要容器集合collection需要比较功能的时候来指定这个比较器,这可以看出一种设计模式,将算法和数据分离。为了使用不同的排序标准准备的,比如:升序,降序或者其他排序

优缺点:comparable 他和一个具体类绑定属于"静态绑定",而comparator比较灵活,它可以被用于各个需要比较功能的类使用 属于"动态绑定"
作者: 党传才    时间: 2012-4-16 17:05
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。

Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String    Integer自己就可以完成比较大小操作)   
   
   而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
作者: 魏明明    时间: 2012-4-16 17:06
当我们自定义一个类存储到集合中时,我们要复写 hashcode  ,equals方法,如果我们要存到TreeSet中我们必须要这个类具有比较性,实现Comparable,或者定义比较器让集合实现Comparator,.当定义的类中的比较方法不是你所希望的 你就定义比较器实现Comparator满足你的需求





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