Java 遍历 HashSet 为什么输出是有序的

1.问题

今天学习数据结构哈希表,知道了哈希表的牺牲了顺序性,从而保证了效率。然后我想到了java中的 hashset和Treeset,我记得以前学习set的时候,老师说set元素是有序的,有就是说,hashset 和 treeset都是有序的。可是现在在学习数据结构的时候发现hashset 是无序的, treeset 是有序的,那这就和前面所说的set是有序的互相矛盾了,所以让来验证一下,如下:

 

使用的是 java 8 

HashSet<Integer> set = new HashSet<>();
set.add(3);
set.add(1);
set.add(2);
System.out.println("HashSet : " + set);

TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
System.out.println("TreeSet : " + treeSet);
HashSet : [1, 2, 3]
TreeSet : [1, 2, 3]

从结果得知,hashset和 treeset都是有序的输出元素了。

这样的结果其实和我前面所讲的哈希表牺牲了有序这一命题所矛盾了,可是哈希表确实是牺牲了有序性,那么问题在哪里呢?

 

2.hashset实现原理

仔细回想,不难发现hashset底层使用hashmap来实现的,set的元素存放在map的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值