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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

评分

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

查看全部评分

27 个回复

正序浏览
应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断
回复 使用道具 举报
楼主看开点。记住发帖不仅仅为了技术分就行了。我们是来问问题的。再简单的不懂就问就行,只要不被版主删除就行。是吧?不要技术分又何妨?分不给就不要呗!
懂了这个知识才是硬道理!加油,同样学基础!
回复 使用道具 举报
本帖最后由 librazeng 于 2013-6-9 12:35 编辑

set接口的子类主要有TreeSet和HashSet,两者保证元素的唯一性的办法是不同的。
TreeSet:
这个集合采用的是二叉树结构存储数据,如下图

二叉树的算法
TreeSet集合存储元素的时候,采用元素的自然排序(元素实现Comparable接口,覆写ComparaTo方法)或者集合添加的比较器(比较器实现Comparator接口,覆写Compare(obj o1,obj o2)方法),通过二叉树排序来发现是否有元素重复,如果重复就不再存储了。
HashSet:
这个集合实际是个链表数组,利用元素自身的hashCode()和equals()方法,先比较元素的哈希值是否相等(哈希算法为每个元素生成一个伪随机数,但可能出现不同的元素算出相同哈希值的情况),如果不同就存入链表数组中;如果相等再比较元素是否相同,如果哈希值相同,但元素不同,则会用解决哈希冲突的算法,将两个元素存入链表数组中。

评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

出发点就错了,论坛上很多都是超过25分还来帮助解决问题的人,论坛是帮助新手解决问题,不是帮助你们拿技术分
回复 使用道具 举报
阳丹 发表于 2013-6-7 19:21
大家在论坛里面问的大部分都是java基础,我也是刚学不久,不一定能吸收视频里面讲过的所有内容。不懂就问 ...

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
胡晓思 发表于 2013-6-7 18:43
其实呢!质量贴这是个什么样子的标准呢?大神无法明白刚入门的小菜鸟的苦恼啊!不过大神也是从菜鸟过去的嘛! ...

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
花心々小土豆 发表于 2013-6-7 17:28
不能这么说吧,楼主可能是不太了解哈希存储结构和二叉树存储结构,进而对为什么hashset用hashCode()和equ ...

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
a464538715 发表于 2013-6-7 18:32
大家都在喷你 你好意思吗 版主? 人家是不懂就问怎么了 就算问题简单又怎么样 人家至少在学在问 不可能各 ...

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
黑马伍哲沂 发表于 2013-6-7 21:19
21期在技术分的奖励上稍微严格些。不会为难大家入学的技术分要求。但希望提问尽量结合代码和具体问题。

一 ...

支持一下
回复 使用道具 举报
21期在技术分的奖励上稍微严格些。不会为难大家入学的技术分要求。但希望提问尽量结合代码和具体问题。

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

如果问题解决。及时更换帖子状态到以解决。谢谢。
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

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

大家在论坛里面问的大部分都是java基础,我也是刚学不久,不一定能吸收视频里面讲过的所有内容。不懂就问,我也是希望自己理解深刻一点。何况论坛里面有很多这种问这种视频里面明确讲过的知识点。怎么版主就认为我问得的特别没质量呢
回复 使用道具 举报
王松松 发表于 2013-6-7 18:51
是这么个事,有问题提出来大家帮解决是毫无疑问的,但是菜鸟更应该自强不息! ...

哦  那好吧! 我有一个小问题不好意思去版面发帖了,是这么一个问题啦!
前不久在看赵栋老师的OA   SSH的   
里面老师使用泛型重构了Dao层的代码  让代码变得特别优雅简洁  老师提过 可以类似的实现Service层的 泛型重构
我鼓捣了好久终究不得办法,网上也搜不到  这个确实没办法了  
其实也只有一个小问题了  就是BaseServiceImpl<T>  这个基类里怎么才能按照需要动态的注入 **Dao?
回复 使用道具 举报
胡晓思 发表于 2013-6-7 18:44
其实呢!质量贴这是个什么样子的标准呢?大神无法明白刚入门的小菜鸟的苦恼啊!不过大神也是从菜鸟过去的嘛! ...

是这么个事,有问题提出来大家帮解决是毫无疑问的,但是菜鸟更应该自强不息!
回复 使用道具 举报
王松松 发表于 2013-6-7 18:36
表示支持版主,有些问题完全可以自己解决的应该自己解决好一点!

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

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

支持你 也支持楼主 版主我真心不知道怎么说他
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

大家都在喷你 你好意思吗 版主? 人家是不懂就问怎么了 就算问题简单又怎么样 人家至少在学在问 不可能各个都有你牛逼啊 都能出现你自认为的质量帖 版主你这样的行为早晚会被众人说的
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

不能这么说吧,楼主可能是不太了解哈希存储结构和二叉树存储结构,进而对为什么hashset用hashCode()和equals()保证唯一有疑惑…………
我们应该知道为啥这样,而不是是这样就行。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马