set集合

rem_16_0312 2017-03-31 10:47:10
set集合中的元素为什么不能重复?
...全文
192 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
取名好难 2017-04-01
  • 打赏
  • 举报
回复
list 和 set ,前者是类似与引用指向对象(数组和链表的实现),至于对象是否重复没有关系,我的引用不同就可以了,是可以区分集合的每一条数据的;后者存储的数据类似(key:value),value表示set集合的每一个元素的值,key是通过hash算法生成的,打个比方 String key = hash(value); 假如value相同,那么生成的key也相同,如何区分这两组数据?所以设计者设计set集的时候规定了每个元素的不同。
Glavo 2017-04-01
  • 打赏
  • 举报
回复
因为Set的需求就是不能重复,所以会设计成这样。HashSet也不是唯一的实现,譬如TreeSet内部不使用Hash,而是维护着一个RBT来保存数据
码上行动_Light 2017-04-01
  • 打赏
  • 举报
回复
HashSet 内部的数据结构是 HashMap, 而Map的数据结构是 (key ,value)对,其中key是使用hashCode计算和equals两个算法去确保唯一的(这两个算法到底如何确保唯一你要去看jdk源码了,因为我看过,我发现很难简单的给人讲明白,只能自己去看,自己去算),回到Set, HashSet 内的数据结构就是一个 value值都一样的HashMap,说白了——这里只用了key,key的集合就是set本身了。 其实说这么多,有装逼嫌疑,如果真想弄明白,还是去看源码吧。
李德胜1995 2017-03-31
  • 打赏
  • 举报
回复
set的add方法使用的是HashMap的put方法。。先使用hashCode比较,再用equals比较。。。可以去看一下HashMap的代码
rem_16_0312 2017-03-31
  • 打赏
  • 举报
回复
我刚刚搜到说:set集合中,会根据对象的hashcode去重
爪哇学渣 2017-03-31
  • 打赏
  • 举报
回复
这个问题太有深度了,jdk设定的时候就是有这样的特性

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧