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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Gao23616 初级黑马   /  2012-5-14 08:13  /  1521 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ComparaTo  CompareTor  comapare    怎么区分 ?  都怎么使用?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

2 个回复

倒序浏览
Comparable是一个接口,接口中有抽象方法compareTo(),实现该接口并覆写此抽象方法的类,在存入以二叉树为底层结构的集合时,可以实现对象的排序功能。
Comparator也是一个接口(我们常说的比较器),接口中有抽象方法compare(),当某个类实现该接口并覆写此方法时,就形成了一个比较器,把这个比较器作为参数传递给相应集合时,可以覆盖集合中元素的默认排序方式。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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 比较常见。


评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马