网易首页 > 网易号 > 正文 申请入驻

【194期】HashSet 是无序的吗?为什么输出的结果有序?

0
分享至

点击上方“Java精选”,选择“设为星标”

别问别人为什么,多问自己凭什么!

下方有惊喜,留言必回,有问必答!

每天 08:15 更新文章,每天进步一点点...

集合简称集,是数学中一个基本的概念,主要体现两方面的特征:

1)一个集合中,任何两个元素都可以认为是不相同的,即为每个元素只能出现一次。

2)一个集合中,每个元素的地位都是相同的,元素之间是无序的。

Set集合是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。Set接口主要实现了两个实现类:HashSet类按照哈希算法来存取集合中的对象,存取速度比较快;TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。

Set接口是没有所谓的有序和无序的概念,TreeSet是有序的,但此有序是说读取数据的顺序和插入的数据的顺序一致。

HashSet中无序是指读取数据的顺序不一定和插入数据的顺序一样。但是HashSet真实的情况是有序的,只不过它是通过内部HashCode方法计算hash值后自动进行了排序,所以读取的是经过内部排序后的数据,且此数据每次结果都是一样的顺序。

简单说一说哈希表

一个元素为链表的数组,综合了数组与链表的优点。

HashSet具有以下特点:

1)不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化;

2)HashSet不是同步的;

3)集合元素值可以是null。

同样的,HashMap和HashSet是一样的,HashMap是根据key的hash值进行了排序。

HashSet底层是基于HashMap实现的,HashSet存放的数据实际就是HashMap的key,而HashMap的value存放的是一个静态的final对象PERSENT;当调用HashSet无参构造函数的时候,实际只是实例化了HashMap对象。

HashSet源码,无参构造函数如下:

public HashSet() {
//实例化map成员变量
map = new HashMap<>();
}

HashSet集合中,假如自然数或字符串(单字符或多字符)输出是有序还是无序呢?

public class JingXuanApplication {
public static void main(String[] args) throws Exception {
Random ran = new Random();
Set set = new HashSet<>();
while(set.size() < 20) {
set.add(ran.nextInt(20)+1);
}
for (Integer integer : set) {
System.out.println(integer);
}
}
}

当按照上述代码插入数据后,发现读取出来的数据如下方输出结果顺序,这是因为正好插入数据的hash值是按照这个顺序排列的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

从上面输出结果,单一自然数输出是有序的。那么当插入一个多位的数值时会出现什么样的变化呢?

public class JingXuanApplication {
public static void main(String[] args) throws Exception {
Random ran = new Random();
Set set = new HashSet<>();
while(set.size() < 20) {
set.add(ran.nextInt(2000)+1);
}
for (Integer integer : set) {
System.out.println(integer);
}
}
}

输出结果则每次都不会相同,此次输出结果如下:

1280
1345
419
1861
1317
135
1704
1770
171
1835
588
1298
498
178
597
408
954
1114
1725
1790

总结

Set的实现类HashSet底层是基于HashMap实现的,HashSet存储的元素对应hashMap的key,因为HashMap不能存储重复的Key,所以HashSet不能存放重复元素;由于HashMap的key是基于hashCode存储对象的,所以HashSet中存放的对象也是无序的;HashSet也没有提供get方法,可以通过Iterator迭代器获取数据。

HashSet中元素是按照它们的HashCode值排序存储的,hash算法混淆程度低,在[0, 2^32-1]范围内经过HashMap.hash()之后还是得到之前的结果。

对于单个字符而言,这些HashCode是按照ASCII码,因此,当按顺序添加自然数或者26个英文字符时,会产生一种HashSet也可以有序输出“错觉”的假象。

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

------ THE END ------

精品资料,超赞福利!


3000+ 道面试题在线刷,最新、最全 Java 面试题!

期往精选 点击标题可跳转

技术交流群!

最近有很多人问,有没有读者&异性交流群,你懂的!想知道如何加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群”,即可免费加入交流群!

文章有帮助的话,在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
因模仿老师爆火的19岁网红“钟美美”被波士顿大学录取

因模仿老师爆火的19岁网红“钟美美”被波士顿大学录取

大象新闻
2026-06-23 08:53:21
四大原因 大盘只是假摔

四大原因 大盘只是假摔

趋势巡航
2026-06-23 14:49:58
没有奇迹了!蔡磊发布倒计时演讲,病症已濒临末期,仅靠眼球互动

没有奇迹了!蔡磊发布倒计时演讲,病症已濒临末期,仅靠眼球互动

北纬的咖啡豆
2026-06-21 16:43:10
《抓特务》:沉重的虚无

《抓特务》:沉重的虚无

非典型佛教徒
2026-06-23 01:22:30
突然停业!广州一知名机构被疑跑路,最新进展

突然停业!广州一知名机构被疑跑路,最新进展

南方都市报
2026-06-23 19:39:00
“只有学渣家长会这样”,母亲在考场前失态,网友:你到底哭啥?

“只有学渣家长会这样”,母亲在考场前失态,网友:你到底哭啥?

泽泽先生
2026-06-22 19:49:50
监控还原宝妈避雨事件!矛盾关键点找到了,饭店方透露道歉原因

监控还原宝妈避雨事件!矛盾关键点找到了,饭店方透露道歉原因

追踪之点
2026-06-23 15:51:52
A股:收盘后,传来一个消息,明天,周三或要这样走!

A股:收盘后,传来一个消息,明天,周三或要这样走!

明心
2026-06-23 16:28:01
张雨绮这也太凶了

张雨绮这也太凶了

喜欢历史的阿繁
2026-06-23 20:36:53
豪门宫心计:郭晶晶一个动作,撕开了霍启山“跨国婚讯”的遮羞布

豪门宫心计:郭晶晶一个动作,撕开了霍启山“跨国婚讯”的遮羞布

草莓解说体育
2026-06-23 16:44:20
网传80%的高校教师陷入最无奈的困境,没空做学术…

网传80%的高校教师陷入最无奈的困境,没空做学术…

慧翔百科
2026-06-23 11:34:37
分手后男子以250元合成5张前女友不雅照,并发送给女方家属、亲友,致女方受辱自杀;法院:男子犯侮辱罪,获刑八个月

分手后男子以250元合成5张前女友不雅照,并发送给女方家属、亲友,致女方受辱自杀;法院:男子犯侮辱罪,获刑八个月

扬子晚报
2026-06-23 15:32:33
扬尼斯去了迈阿密:凯尔特人怎么办?

扬尼斯去了迈阿密:凯尔特人怎么办?

张佳玮写字的地方
2026-06-23 13:56:35
董路:我心疼C罗!他腰缠万贯却虎落平阳 活得很累天天被人喊梅西

董路:我心疼C罗!他腰缠万贯却虎落平阳 活得很累天天被人喊梅西

念洲
2026-06-23 18:43:00
中纪委再出大招!公务员这4类行为将被大数据盯死,沾上就完蛋!

中纪委再出大招!公务员这4类行为将被大数据盯死,沾上就完蛋!

细说职场
2026-06-23 12:46:13
马云携阿里高管下田插秧 全员挽裤光脚劳作 田间笑容灿烂

马云携阿里高管下田插秧 全员挽裤光脚劳作 田间笑容灿烂

快科技
2026-06-22 17:56:07
7月3日油价将迎大幅下调 每吨预计降幅630元

7月3日油价将迎大幅下调 每吨预计降幅630元

蚌埠日报
2026-06-22 10:59:17
全新宝马X5要来了,或6月30日首发,国产依旧加长

全新宝马X5要来了,或6月30日首发,国产依旧加长

汽车公告板
2026-06-23 17:47:34
2026天津高考分数线公布!本科线458!特控线547!较去年降低!

2026天津高考分数线公布!本科线458!特控线547!较去年降低!

高三倒计时
2026-06-23 19:48:40
6月23日俄乌:克里米亚再遭袭击,乌克兰称耐心并非“无穷无尽”

6月23日俄乌:克里米亚再遭袭击,乌克兰称耐心并非“无穷无尽”

山河路口
2026-06-23 16:45:12
2026-06-23 21:27:00
Java精选
Java精选
一场永远也演不完的戏
1795文章数 3859关注度
往期回顾 全部

科技要闻

48名中国开发者联名举报苹果

头条要闻

17岁女孩被闺蜜持刀刺成重伤对方自杀身亡 警方已撤案

头条要闻

17岁女孩被闺蜜持刀刺成重伤对方自杀身亡 警方已撤案

体育要闻

扬尼斯去了迈阿密:凯尔特人怎么办?

娱乐要闻

内娱95后顶流格局发生潜移默化的变化

财经要闻

屋顶光伏度苦夏

汽车要闻

华为智驾ADS限时优惠月底结束 7月1日前下订立省3000元

态度原创

房产
旅游
本地
公开课
军事航空

房产要闻

洞察新局|预算不变 居住升级 2026广州置业成本观察

旅游要闻

赛事引流、文化破圈 端午假期“热气腾腾”

本地新闻

吃一次广东龙舟饭,才懂什么是豪华盛宴

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

以色列总理、国防部长和国防军总参谋长发表联合声明

无障碍浏览 进入关怀版