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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 阳丹 于 2013-6-7 22:40 编辑

Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?  是用==还是 equals()?  它们有何区别

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
袁梦希 + 1 很给力!
黑马伍哲沂 + 3

查看全部评分

27 个回复

倒序浏览
利用equals方法判断是否为同一个对象 equals同时也会调用hashCode方法比较地址值
回复 使用道具 举报
==是比较内存地址的
回复 使用道具 举报
这个视频中会有想详细讲解的, 建议楼主自习看视频先
回复 使用道具 举报
本帖最后由 曾林魁 于 2013-6-7 12:16 编辑

对于这个问题,你首先得要知道set 集合底层的数据结构;他实际上底层运用的是map集合中的方法来实现的。所以对于像hashset集合判断重复元素,首先要根据所比较对象的hashCode()方法来比较两对象是否有相同的哈希值;如果两对象哈希值相同,则用equals()方法比较两对象是否重复;而对于Treeset判断的依据可以是所存对象的自己实现的Comparable接口的comparato(0方法;也可以是特定的实现了comparator接口的compara()方法的比较器;
至于 == 和equals()方法的区别,请看下面解释:
对于==他经常用来比较两个数值型量是否相等;当用==比较两个对象时他实际比较的是两个对象的引用的值,也就是对象的地址值(哈希值);
equals()方法是Object类中的方法:他常用来比较两对象的值是否相同;在Object中的equals()方法他实际上比较的也是对象的哈希值;但是当我们在创建类时经常复写了equals()方法,用他来提供比较两对象是否相同的依据:也有些类是已经复写了equals()方法的,像String类等;

其实建议你在学集合框架这里的时候;你最好是先看看数据结构的知识,像哈希表,二叉树,链表等,有助于你理解;还有就是你得先明白Object中的hashCode()方法和equals方法的用法;

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 很详细

查看全部评分

回复 使用道具 举报
hashset用equals和hashCode保证唯一性 treeset用comparable或者comparator保证唯一性
回复 使用道具 举报
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

不能这么说吧,楼主可能是不太了解哈希存储结构和二叉树存储结构,进而对为什么hashset用hashCode()和equals()保证唯一有疑惑…………
我们应该知道为啥这样,而不是是这样就行。
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

大家都在喷你 你好意思吗 版主? 人家是不懂就问怎么了 就算问题简单又怎么样 人家至少在学在问 不可能各个都有你牛逼啊 都能出现你自认为的质量帖 版主你这样的行为早晚会被众人说的
回复 使用道具 举报
花心々小土豆 发表于 2013-6-7 17:28
不能这么说吧,楼主可能是不太了解哈希存储结构和二叉树存储结构,进而对为什么hashset用hashCode()和equ ...

支持你 也支持楼主 版主我真心不知道怎么说他
回复 使用道具 举报
表示支持版主,有些问题完全可以自己解决的应该自己解决好一点!
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

其实呢!质量贴这是个什么样子的标准呢?大神无法明白刚入门的小菜鸟的苦恼啊!不过大神也是从菜鸟过去的嘛!  
而且怎么说呢?在论坛也混了一段时间了  大家讨论的也都是些基础的问题呢  问题太大  根本很难有为了技术分的小菜菜能回答嘛! 大家都是初学者  说是提问  大都发问者自己是知道答案的   因为获取答案的通道实在太多太多了  而且会快很多   只是觉得有些有价值的问题发出来  曾经让自己疑惑过的问题  发出来  大家分享而已  顺便得个技术分 混个脸熟啥的  大家说是这么个事么咯?
回复 使用道具 举报
王松松 发表于 2013-6-7 18:36
表示支持版主,有些问题完全可以自己解决的应该自己解决好一点!

其实呢!质量贴这是个什么样子的标准呢?大神无法明白刚入门的小菜鸟的苦恼啊!不过大神也是从菜鸟过去的嘛!  
而且怎么说呢?在论坛也混了一段时间了  大家讨论的也都是些基础的问题呢  问题太大  根本很难有为了技术分的小菜菜能回答嘛! 大家都是初学者  说是提问  大都发问者自己是知道答案的   因为获取答案的通道实在太多太多了  而且会快很多   只是觉得有些有价值的问题发出来  曾经让自己疑惑过的问题  发出来  大家分享而已  顺便得个技术分 混个脸熟啥的  大家说是这么个事么咯?
回复 使用道具 举报
胡晓思 发表于 2013-6-7 18:44
其实呢!质量贴这是个什么样子的标准呢?大神无法明白刚入门的小菜鸟的苦恼啊!不过大神也是从菜鸟过去的嘛! ...

是这么个事,有问题提出来大家帮解决是毫无疑问的,但是菜鸟更应该自强不息!
回复 使用道具 举报
王松松 发表于 2013-6-7 18:51
是这么个事,有问题提出来大家帮解决是毫无疑问的,但是菜鸟更应该自强不息! ...

哦  那好吧! 我有一个小问题不好意思去版面发帖了,是这么一个问题啦!
前不久在看赵栋老师的OA   SSH的   
里面老师使用泛型重构了Dao层的代码  让代码变得特别优雅简洁  老师提过 可以类似的实现Service层的 泛型重构
我鼓捣了好久终究不得办法,网上也搜不到  这个确实没办法了  
其实也只有一个小问题了  就是BaseServiceImpl<T>  这个基类里怎么才能按照需要动态的注入 **Dao?
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

大家在论坛里面问的大部分都是java基础,我也是刚学不久,不一定能吸收视频里面讲过的所有内容。不懂就问,我也是希望自己理解深刻一点。何况论坛里面有很多这种问这种视频里面明确讲过的知识点。怎么版主就认为我问得的特别没质量呢
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

大家在论坛里面问的大部分都是java基础,我也是刚学不久,不一定能吸收视频里面讲过的所有内容。不懂就问,我也是希望自己理解深刻一点。何况论坛里面有很多这种问这种视频里面明确讲过的知识点。怎么版主就认为我问得的特别没质量呢
回复 使用道具 举报
21期在技术分的奖励上稍微严格些。不会为难大家入学的技术分要求。但希望提问尽量结合代码和具体问题。

一句话问题并知识显得非常基础,能在视频里轻易得到答案的,21版主一般不予技术分奖励哦。

如果问题解决。及时更换帖子状态到以解决。谢谢。
回复 使用道具 举报
黑马伍哲沂 发表于 2013-6-7 21:19
21期在技术分的奖励上稍微严格些。不会为难大家入学的技术分要求。但希望提问尽量结合代码和具体问题。

一 ...

支持一下
回复 使用道具 举报
a464538715 发表于 2013-6-7 18:32
大家都在喷你 你好意思吗 版主? 人家是不懂就问怎么了 就算问题简单又怎么样 人家至少在学在问 不可能各 ...

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马