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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 、__WSD吴少东 中级黑马   /  2013-4-15 21:04  /  1907 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 、__WSD吴少东 于 2013-4-15 22:50 编辑

看完视频敲了一些代码,有点不大清楚,

comparable   和 comparator,到底应该怎么用,感觉这里没掌握,看了几遍视频还是不大了解。
还有那个comparaTo 是不是说,每个基本类型肯定都有一个。
大神们。来指点指点,

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

11 个回复

倒序浏览
comparable  :让类对象自身具备比较性,但是如果你有一个类对象,在写源代码的时候就没有实现这个接口,
那么后期,你想不改动源代码,就再写个比较器comparator,然后让集合排序.原理都是排序,想用哪个用哪个.写多了,自然就明白了.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
comparable  是集合用来排序的自定义的类必须要实现comparable比是单个的 他用comparaTo方法
comparator 是比两个的值是还是
回复 使用道具 举报
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。 Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String    Integer自己就可以完成比较大小操作)          而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
comparable    Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。
楼主这样理解   继承comparable   就是让集合里面的元素具有1,2,3,4...这样的顺序 ,   Comparator   叫他比较器,集合的元素都让他一一比较大小 这样就元素就有顺序咯,   比较器比较常用   ,我一般都用比较器排序

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
陈圳 发表于 2013-4-15 21:09
comparable  :让类对象自身具备比较性,但是如果你有一个类对象,在写源代码的时候就没有实现这个接口,
那么 ...

Soga...原来有一个是用来修改代码的,。。貌似这句话在视频上听过,看来还是看得不仔细啊。。
谢谢你了,。大婶
回复 使用道具 举报
。。。。。。 发表于 2013-4-15 21:15
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排 ...

受教了,大婶。谢谢你啊。
回复 使用道具 举报
Alan 发表于 2013-4-15 21:27
comparable    Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排 ...

我有一点不清楚啊,你说的集合外和集合内是什么意思,能具体解释下不,
回复 使用道具 举报
本帖最后由 JavaUtil 于 2013-4-15 22:32 编辑

说一下我自己的理解吧!
     如果集合里装了元素,而你恰巧要让他们这些元素在这个空间里自己排序,那就要看这些元素有没有继承comparable这个接口并实现它的方法了。如果有,恭喜你,他们自己就可以排序了。
     如果没有或者你不喜欢它们按照原有的方法排序,你就可以选择两个方式来改进:1、重写comparable的实现方法,不过很少有人这么做。因为有违封装这种理念。而且下次想用原来的方法就麻烦了。2、自己写个比较器继承comparator并实现其方法,再注册给集合,你就可以通过集合来控制这些元素了。
    准确的说,正式因为java对基本数据类型有了自动封装和拆箱以后,它们才有了comparaTo方法。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报

两个都是接口,但所属类不同。实现比较功能的方式也不同。
Comparable接口作用在类上。使得类强行加上比较性,通过实现compareTo(T o) 获得比较功能。这个接口统称作用在类上。
Comparator接口作用的类是个比较器。运用于集合中,例如TreeSet集合,可以在构造方法中作为比较器传入。通过实现compare(T o1, T o2) 进行比较;equals(Object obj) 判断重复对象。
具体参考Api文档,Comparable在java.lang包中,Comparator在java.util包中。
,希望能帮助到楼主。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
陈中岩 发表于 2013-4-15 22:28
两个都是接口,但所属类不同。实现比较功能的方式也不同。
Comparable接口作用在类上。使得类强行加上比 ...

有帮助,有帮助。谢谢你啊
回复 使用道具 举报
、__WSD吴少东 发表于 2013-4-15 22:50
有帮助,有帮助。谢谢你啊

互相学习,互相学习。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马