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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© VincentWJ 中级黑马   /  2016-3-16 16:53  /  545 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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?

6 个回复

倒序浏览
不好意思,页面没刷新,重复发的!!!
回复 使用道具 举报
首先HashSet的原理你没看吧,不说原理这么复杂,它的基本属性是用来存数据,并且保证数据有唯一性。所以你存两个字符串b是不可能的,只能存一个。所以打出来是b a.
至于无序,是因为底层是个哈希表,每次存储的时候跟内存值有关系(这个你不需要管)。你只要明白每次存进去的顺序和取出来的顺序是不一样的就行。
比如存进去a,b,c
取出来可能是,a,c,b 也有可能b,c,a等
回复 使用道具 举报
楼上很详细了。
回复 使用道具 举报
Clouddd 发表于 2016-3-16 17:23
首先HashSet的原理你没看吧,不说原理这么复杂,它的基本属性是用来存数据,并且保证数据有唯一性。所以你 ...

首先谢谢你的详细回答,但是我还是不懂,为什么这段代码输出的结果是b a?为什么不是a b?不是说无序的吗?那我怎么确定它输出的一定是b a?Set唯一性我懂。。。
回复 使用道具 举报
VincentWJ 发表于 2016-3-16 20:03
首先谢谢你的详细回答,但是我还是不懂,为什么这段代码输出的结果是b a?为什么不是a b?不是说无序的吗 ...

输出无序是说ab或者ba,每次都不确定的,只是你遇到的刚好是ba
回复 使用道具 举报 0 1
本帖最后由 11210107 于 2016-3-17 10:50 编辑

输出的无序性,不等于随机性。如果输出是ba,一直输出ba无论运行多少次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马