黑马程序员技术交流社区

标题: ?? [打印本页]

作者: Gao23616    时间: 2012-5-14 08:13
标题: ??
ComparaTo  CompareTor  comapare    怎么区分 ?  都怎么使用?
作者: 赵玮_Tom    时间: 2012-5-14 08:37
Comparable是一个接口,接口中有抽象方法compareTo(),实现该接口并覆写此抽象方法的类,在存入以二叉树为底层结构的集合时,可以实现对象的排序功能。
Comparator也是一个接口(我们常说的比较器),接口中有抽象方法compare(),当某个类实现该接口并覆写此方法时,就形成了一个比较器,把这个比较器作为参数传递给相应集合时,可以覆盖集合中元素的默认排序方式。
作者: 曾_强    时间: 2012-5-14 09:30
本帖最后由 jiyixuan 于 2012-5-14 09:32 编辑

1、Comparable是个java.lang包下的一个超级接口.它有一个方法compareTo(Object o);   
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
可以看一下该接口的定义:
public interface Comparable

{

   public int compareTo(Object o);

}

该接口定义类的自然顺序,实现该接口的类就可以按这种方式排序.


2、Comparator是个java.util包下的一个接口,强行对某个对象 collection 进行整体排序的比较函数。实现这个接口可以构造一个对某个容器实现排序的比较器!就是说,我们不想用自然排序,就不要实现Comparable接口,我们可以自己实现一个Compraator接口,构造一个我们业务所需要的比较器!这么以来我们的构造起非常灵活!

看一下Comparator的全部内容:
public interface Comparator
{
  int compare(Object o1, Object o2);
  boolean equals(Object obj);
}  
看出Comparator接口里面有两个方法public int compare(Object arg0, Object arg1)和boolean equals(Object obj);继承 Comparator接口必须实现compare方法,我们一般都只需要实现compare方法就行了,因为类都是默认从Object继承过来的 ,所以会使用Object的equals方法。

简单说就是实现Comparable接口时注意覆盖其compareTo方法,在需要自己指定特殊的比较方式时,利用比较器(Comparator )方式实现,那么就需要覆盖compare方法。听老师说,在实际情况中,都使用比较器Comparator 比较常见。







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