黑马程序员技术交流社区

标题: HashSet存储问题 [打印本页]

作者: VincentWJ    时间: 2016-3-16 16:53
标题: HashSet存储问题
HashSet存储不是无序的吗?那我应该怎么判断HashSet遍历的结果?
HashSet<String> hs = new HashSet<String>();
hs.add("b");
hs.add("a");
hs.add("b");
for(String s : hs) {
System.out.print(s+" ");
}
为什么这段代码输出的结果是b a?
作者: VincentWJ    时间: 2016-3-16 17:01
不好意思,页面没刷新,重复发的!!!
作者: Clouddd    时间: 2016-3-16 17:23
首先HashSet的原理你没看吧,不说原理这么复杂,它的基本属性是用来存数据,并且保证数据有唯一性。所以你存两个字符串b是不可能的,只能存一个。所以打出来是b a.
至于无序,是因为底层是个哈希表,每次存储的时候跟内存值有关系(这个你不需要管)。你只要明白每次存进去的顺序和取出来的顺序是不一样的就行。
比如存进去a,b,c
取出来可能是,a,c,b 也有可能b,c,a等
作者: 友人A    时间: 2016-3-16 17:35
楼上很详细了。
作者: VincentWJ    时间: 2016-3-16 20:03
Clouddd 发表于 2016-3-16 17:23
首先HashSet的原理你没看吧,不说原理这么复杂,它的基本属性是用来存数据,并且保证数据有唯一性。所以你 ...

首先谢谢你的详细回答,但是我还是不懂,为什么这段代码输出的结果是b a?为什么不是a b?不是说无序的吗?那我怎么确定它输出的一定是b a?Set唯一性我懂。。。
作者: Clouddd    时间: 2016-3-17 09:31
VincentWJ 发表于 2016-3-16 20:03
首先谢谢你的详细回答,但是我还是不懂,为什么这段代码输出的结果是b a?为什么不是a b?不是说无序的吗 ...

输出无序是说ab或者ba,每次都不确定的,只是你遇到的刚好是ba
作者: 11210107    时间: 2016-3-17 10:45
本帖最后由 11210107 于 2016-3-17 10:50 编辑

输出的无序性,不等于随机性。如果输出是ba,一直输出ba无论运行多少次




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2