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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

花心々小土豆 发表于 2013-6-7 17:28
不能这么说吧,楼主可能是不太了解哈希存储结构和二叉树存储结构,进而对为什么hashset用hashCode()和equ ...

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

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
阳丹 发表于 2013-6-7 19:21
大家在论坛里面问的大部分都是java基础,我也是刚学不久,不一定能吸收视频里面讲过的所有内容。不懂就问 ...

欢迎提意见 ! 过后我会出个意见贴, 对于这问题到底该怎么去问 ,望跟帖!
回复 使用道具 举报
刘凯 发表于 2013-6-7 12:55
多出质量贴 这种贴 视频中明确讲到的  发问者是很难得到分的

出发点就错了,论坛上很多都是超过25分还来帮助解决问题的人,论坛是帮助新手解决问题,不是帮助你们拿技术分
回复 使用道具 举报
本帖最后由 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 神马都是浮云

查看全部评分

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