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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨强 黑马帝   /  2011-10-26 01:20  /  2383 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Comparable和Comparator区别是什么

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

6 个回复

倒序浏览
石头 黑马帝 2011-10-26 01:26:15
沙发
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。

Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String    Integer自己就可以完成比较大小操作)   
   
   而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

这是搜索到的答案。。。本人还是菜鸟。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 辛苦了

查看全部评分

回复 使用道具 举报
这是集合排序要用到的,一种排序方法是让元素自身具备比较性,元素类需要实现comparable接口,覆盖compareTo()方法;
另一种排序方法是当元素自身不具备比较性,或者具备的比较性不是所需的,这时候就需要让集合自身具备比较性,定义一个比较器(实现了comparator接口的类对象),将比较器作为参数,传递给集合的构造函数。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘浩 黑马帝 2011-10-26 08:32:26
板凳
他们是TreeSet集合两种排序方式。

comparable:
  让元素自身具备比较性,需要元素死心啊comparable接口。覆盖comparareTO方法。
           这种排序有局限性:1.元素自身不具备比较性。2.具备的比较性不是所有需要的。
所有有了第二种排序、

Comparator:
    需呀定义一个类实现Comparator接口,覆盖compare方法,并将接口的子类对象作为参数传递给treeSer集合的够杂函数,也就是自定义比较器的方法。

如果自然排序和比较器同时存在,以比较强为主.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黄健 黑马帝 2011-10-26 08:58:24
报纸
java api 中是这样解释的
Comparable接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以通过Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。

Comparator强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。


评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
杨强 黑马帝 2011-10-26 09:22:24
地板
了解了 3q
回复 使用道具 举报
来过,学习了
话说我好像没看这里呢!!
看来还得回去看教程里前面的东西了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马