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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张飞年 中级黑马   /  2012-9-3 11:09  /  2083 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张飞年 于 2012-9-3 21:58 编辑

看了两次视频,也查看了Api,对于 compare(Object o1,Object o2)和  对象a.compareTo(对象b)这两个方法还是纠缠不清楚,它们作用有什么区别?在实际运用中有什么技巧,或者说它们的实质是怎样的,哪 个大虾知道啊,说说。

评分

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

查看全部评分

11 个回复

倒序浏览
简单来说,compare(Object o1,Object o2)是A调用compare来比较B和C是否相同,而a.compareTo(对象b)是A调用compareto来比较A和B是否相同。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 新手鼓励!

查看全部评分

回复 使用道具 举报
compareTo(Object obj)是Comparable接口中的方法,compare(Object o1,Object o2)是Comparator接口中的方法其实就是这两个接口有什么区别,
简单的说就是,Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部定义的方法实现的排序;
比如,你定义的Student类实现了Comparable接口,覆盖compareTo方法,那么Student这个类的对象之间是可以比较的,
这个类组成的集合就可以直接使用sort方法排序
  而Comparator可以理解成一种算法的实现,将算法和数据分离
比如,你定义一个MyCom的类implements  Comparator
   那么你创建的MyCom的对象---new MyCom()就是一个比较器对象,
可以直接传个一个集合---List list = new ArrayList(new MyCom());
这样的话,假如你定义Student时忘了实现Comparable接口,
那么把多个Student对象放到list里,也可以排序,而不必改变Student对象本身,也更加灵活

评分

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

查看全部评分

回复 使用道具 举报
TreeSet排序的方式一:让元素自身具备比较性,需要实现Comparable接口,覆盖compareto方法。
                                                        这种比较方式称为自然顺序排序。
                                排序方式二:如果元素自身不具备比较性或者具备的比较性(自然顺序)不是所需要的,
                                这是只能用第二种方式。让容器自身具备比较性,容器一初始化就具备比较功能,意味着,容器在对象构造时
                                完成的,有一个构造方法TreeSet(comparator)在容器初始化时可以指定一个比较器。
                                需要实现comparator 方法
                                所以这种方式为比较器排序。
回复 使用道具 举报
Comparable 用作默认的比较方式
Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
回复 使用道具 举报
刘岩喜 发表于 2012-9-3 21:20
Comparable 用作默认的比较方式
Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供 ...

你的回答比较正式,我想找个通俗易懂的理解下,我是刚学习这个,呵呵 ,谢谢你啊
回复 使用道具 举报
李志群 发表于 2012-9-3 12:43
TreeSet排序的方式一:让元素自身具备比较性,需要实现Comparable接口,覆盖compareto方法。
                                                        这种比 ...

回答不错,3Q。
回复 使用道具 举报
李志群 发表于 2012-9-3 12:43
TreeSet排序的方式一:让元素自身具备比较性,需要实现Comparable接口,覆盖compareto方法。
                                                        这种比 ...

回答不错,3Q。
回复 使用道具 举报
TreeSet
                        底层数据结构是二叉树,线程不安全。
                        如何保证元素的排序呢?两种方式
                        A:让元素本身具备比较性
                                实现Compareable接口中的compareTo方法。
                        B:让集合具备比较性
                                实现Comparator接口中的compare方法。
回复 使用道具 举报
袁艳超 发表于 2012-9-3 11:39
compareTo(Object obj)是Comparable接口中的方法,compare(Object o1,Object o2)是Comparator接口中的方法 ...

好专业,谢谢。
回复 使用道具 举报
孙岳 发表于 2012-9-3 11:22
简单来说,compare(Object o1,Object o2)是A调用compare来比较B和C是否相同,而a.compareTo(对象b)是A调用 ...

很通俗,谢谢
回复 使用道具 举报
张飞年 发表于 2012-9-3 21:42
回答不错,3Q。

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