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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 快乐的黑马 中级黑马   /  2014-1-3 21:00  /  1426 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口 Comparator<T>和接口 Comparable<T>的区别在哪?还有那个要覆盖hashCode()和equals(Object obj)方法也不是很懂,希望高手赐教。

评分

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

查看全部评分

7 个回复

倒序浏览
我自己的理解Comparator<T>接口实现的方法需要传入两个参数进行对比而 Comparable<T>接口实现的方法只需要传入一个被比参数

评分

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

查看全部评分

回复 使用道具 举报
嗯 但这两个除了参数的区别还有啥不同呢?
回复 使用道具 举报
当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。

一、Comparator

强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。

评分

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

查看全部评分

回复 使用道具 举报
Comparator<T>和接口 Comparable<T>
这个两个接口的作用对象是不同的。

Comparator<T>强行对某个对象 collection 进行整体排序 的比较函数。
这个是对集合中的元素进行排序的。

Comparable<T>此接口强行对实现它的每个类的对象进行整体排序。
这个是让某个对象自身具备比较性的。


hashCode()和equals(Object obj)
hashCode()这个涉及到底层是哈希表结构的集合的存储排序问题。
底层是哈希表数据结构的集合存放元素,是根据hashCode()方法算出来的值来判断存放的位置的
同时取出的时候也是根据这个去查找的。
equals(Object obj)是根据引用值来判断两个对象是不是引用的同一个地址。也就是说是根据内存地址
来判断两个对象是不是一样的。如果两个对象的内存地址一样,哈希表结构的集合当然只存一个。
集合在没有序列化以前,内部其实存的是内存地址。

评分

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

查看全部评分

回复 使用道具 举报
Comparable和Comparator,可以按语义来理解的。
Comparable是“可比较的”实现它的类可以具有比较性,相当于扩展了类的功能。哥们,我这个类是可比较大小的。
Comparator是“比较器”,专业的么,实现了我,你就是专业的比较器。换句话说,实现该接口的类基本就是个描述比较方法的类。而Comparable则不行,比较性只是它的一个功能而已。
至于具体的应用,毕老师的视频讲的很清楚了,我就不献丑了。
覆盖hashCode()和equals(Object obj)方法,这应该是HashSet集合的要求吧。
Set集合天生就要给大家排队的,要互相比较。要排队当然就要有比较么,Set集合要比出大小高低来,才能往里面存,什么,你跟我一样,不好意思,你进不来。使用set就是为了去重复和排队,看穿这个,其他的就好理解了。我HashSet就靠 hashCode()和equals(Object obj)方法 来实现大家排排队,当然就要写这两个方法了,这就是我的特点,没什么好说的。

评分

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

查看全部评分

回复 使用道具 举报
Comparable 是给要排序的实体本身实现的接口,而 Comparator 则是第三方。

比如:类 A 实现了 Comparable 接口,表示它可以和另一个 A 比较来达到排序的目的。
但,假设用户想点击按钮“按名字排序”,之后他又想“按QQ号排序”,这样的需求我们用 Comparable 是无法同时满足两种情况的,那么我们就需要第三方 Comparator,当我们在使用 Collections.sort() 方法时传递这个 Comparator 让它来排序。因此 Comparable 里面的方法只需要 1 个参数,因为另一个参数就是这个 A 类实例自己,而 Comparator 需要 2 个参数,它是第三方比较器,接收 2 个参数。
回复 使用道具 举报
其LovE斤 发表于 2014-1-3 22:11
Comparator和接口 Comparable
这个两个接口的作用对象是不同的。

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