黑马程序员技术交流社区

标题: 集合的一些小问题 [打印本页]

作者: 、__WSD吴少东    时间: 2013-4-15 21:04
标题: 集合的一些小问题
本帖最后由 、__WSD吴少东 于 2013-4-15 22:50 编辑

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

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

作者: 陈圳    时间: 2013-4-15 21:09
comparable  :让类对象自身具备比较性,但是如果你有一个类对象,在写源代码的时候就没有实现这个接口,
那么后期,你想不改动源代码,就再写个比较器comparator,然后让集合排序.原理都是排序,想用哪个用哪个.写多了,自然就明白了.
作者: 周一川    时间: 2013-4-15 21:15
comparable  是集合用来排序的自定义的类必须要实现comparable比是单个的 他用comparaTo方法
comparator 是比两个的值是还是
作者: 。。。。。。    时间: 2013-4-15 21:15
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。 Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String    Integer自己就可以完成比较大小操作)          而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
作者: Alan    时间: 2013-4-15 21:27
comparable    Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。
楼主这样理解   继承comparable   就是让集合里面的元素具有1,2,3,4...这样的顺序 ,   Comparator   叫他比较器,集合的元素都让他一一比较大小 这样就元素就有顺序咯,   比较器比较常用   ,我一般都用比较器排序
作者: 、__WSD吴少东    时间: 2013-4-15 21:28
陈圳 发表于 2013-4-15 21:09
comparable  :让类对象自身具备比较性,但是如果你有一个类对象,在写源代码的时候就没有实现这个接口,
那么 ...

Soga...原来有一个是用来修改代码的,。。貌似这句话在视频上听过,看来还是看得不仔细啊。。
谢谢你了,。大婶
作者: 、__WSD吴少东    时间: 2013-4-15 21:30
。。。。。。 发表于 2013-4-15 21:15
comparable&   Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排 ...

受教了,大婶。谢谢你啊。
作者: 、__WSD吴少东    时间: 2013-4-15 21:32
Alan 发表于 2013-4-15 21:27
comparable    Comparator    都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排 ...

我有一点不清楚啊,你说的集合外和集合内是什么意思,能具体解释下不,

作者: JavaUtil    时间: 2013-4-15 22:26
本帖最后由 JavaUtil 于 2013-4-15 22:32 编辑

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

作者: 陈中岩    时间: 2013-4-15 22:28

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

有帮助,有帮助。谢谢你啊
作者: 陈中岩    时间: 2013-4-16 02:56
、__WSD吴少东 发表于 2013-4-15 22:50
有帮助,有帮助。谢谢你啊

互相学习,互相学习。




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