首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你来说一下map和set有什么区别,分别又是怎么实现的?
[问答题]
请你来说一下map和set有什么区别,分别又是怎么实现的?
添加笔记
求解答(0)
邀请回答
收藏(429)
分享
纠错
3个回答
添加回答
4
朗基努斯
map是接口,不提供实现。map的最典型的实现代表是Hashmap, 其底层是数组加链表的形式,数组保存对key哈希后的hash值,称为哈希槽;每个哈希槽后面都挂着一串链表,链表的每个节点都是一个entry,这个entry保存了<key,value>;每次要存某个<key,value>时,先根据key计算其hash值找到对应的槽,再顺着槽后面挂着的entry链表去找有无该key,有则直接更新该key所在entry的value值,无则将该<key,value>包装成entry插入到这个链表的开头;
map是双列集合,同时存储key和value; set是单列集合,只保存一个值。在底层,单列集合是通过屏蔽双列集合的一列来实现保存单列的(Hashset是通过屏蔽HashMap的value列实现的),HashSet把它要存储的值放到HashMap的key中,同时屏蔽掉value;这也解释了为什么HashMap的key不能重复,而HashSet的存的值不能重复,因为本质上两者是一样的。
发表于 2019-06-13 18:19:26
回复(0)
0
残月悲梦
Map 底层是 数组和链表实现的,数据是KEY,VALUE的结构。
Set 继承自Collection接口,底层也使用了map,add的时候其实调用的map的put方法。另外set是不可重复集.
发表于 2019-06-13 16:38:52
回复(0)
0
恋空。
find能解决的问题尽量我们findd解决
发表于 2019-06-13 11:19:10
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
上传者:
小小
难度:
3条回答
429收藏
2280浏览
热门推荐
相关试题
用二进制来编码字符串“xyzwxy...
字符串
评论
(1)
下面关于 Java 中的反射(Re...
Java
评论
(1)
在Spring事务管理中,若Ser...
Spring
评论
(1)
对一个带有过期时间的 key 执行...
Redis
评论
(1)
在Go语言中,以下自定义类型中,哪...
Go
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题