首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
没烦恼_
江汉大学 后端工程师
发布于湖北
关注
已关注
取消关注
@美汁源果粒橙:
【Android面试】Java| HashMap面试题整理
一、HashMap有用过吗?您能给我说说他的主要用途吗?答:有用过,我在平常工作中经常会用到HashMap这种数据结构,HashMap是基于Map接口实现的一种键-值对 <key,value>的存储结构,允许null值,同时非有序,非同步(即线程不安全)。HashMap的底层实现是数组 + 链表 + 红黑树(JDK1.8增加了红黑树部分)。它存储和查找数据时,是根据键key的hashCode的值计算出具体的存储位置。HashMap最多只允许一条记录的键key为null,HashMap增删改查等常规操作都有不错的执行效率,是ArrayList和LinkedList等数据结构的一种折中实现。二、您能说说HashMap常用操作的底层实现原理吗?如存储put(K key, V value),查找get(Object key),删除remove(Object key),修改replace(K key, V value)等操作。答:调用put(K key, V value)操作添加key-value键值对时,进行了如下操作:判断哈希表Node<K,V>[] table是否为空或者null,是则执行resize()方法进行扩容;根据插入的键值key的hash值,通过(n - 1) & hash当前元素的hash值 & hash表长度 - 1(实际就是 hash值 % hash表长度)计算出存储位置table[i];如果存储位置没有元素存放,则将新增结点存储在此位置table[i];如果存储位置已经有键值对元素存在,则判断该位置元素的hash值和key值是否和当前操作元素一致,一致则证明是修改value操作,覆盖value即可;当前存储位置即有元素,又不和当前操作元素一致,则证明此位置table[i]已经发生了hash冲突,则通过判断头结点是否是treeNode,如果是treeNode则证明此位置的结构是红黑树,已红黑树的方式新增结点;如果不是红黑树,则证明是单链表,将新增结点插入至链表的最后位置,随后判断当前链表长度是否 大于等于 8,是则将当前存储位置的链表转化为红黑树。遍历过程中如果发现key已经存在,则直接覆盖value。插入成功后,判断当前存储键值对的数量大于阈值threshold 是则扩容。三、hash冲突(或者叫hash碰撞)是什么?为什么会出现这种现象,如何解决hash冲突?答:hash冲突:当我们调用put(K key, V value)操作添加key-value键值对,这个key-value键值对存放在的位置是通过扰动函数(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)计算键key的hash值。随后将这个hash值 % 模上 哈希表Node<K,V>[] table的长度 得到具体的存放位置。所以put(K key, V value)多个元素,是有可能计算出相同的存放位置。此现象就是hash冲突或者叫hash碰撞。hash冲突的避免:既然会发生hash冲突,我们就应该想办法避免此现象的发生,解决这个问题最关键就是如果生成元素的hash值。Java是使用“扰动函数”生成元素的hash值。四、HashMap的容量为什么一定要是2的n次方?答:因为调用put(K key, V value)操作添加key-value键值对时,具体确定此元素的位置是通过 hash值 % 模上哈希表Node<K,V>[] table的长度 hash % length 计算的。但是"模"运算的消耗相对较大,通过位运算h & (length-1)也可以得到取模后的存放位置,而位运算的运行效率高,但只有length的长度是2的n次方时,h & (length-1) 才等价于 h %length。而且当数组长度为2的n次幂的时候,不同的key算出的index相同的几率较小,那么数据在数组上分布就比较均匀,也就是说碰撞的几率小,相对的,查询的时候就不用遍历某个位置上的链表,这样查询效率也就较高了。五、您能说说HashMap和HashTable的区别吗?1)容器整体结构:HashMap的key和value都允许为null,HashMap遇到key为null的时候,调用putForNullKey方法进行处理,而对value没有处理。Hashtable的key和value都不允许为null。Hashtable遇到null,直接返回NullPointerException。2) 容量设定与扩容机制:HashMap默认初始化容量为 16,并且容器容量一定是2的n次方,扩容时,是以原容量 2倍 的方式 进行扩容。Hashtable默认初始化容量为 11,扩容时,是以原容量 2倍 再加 1的方式进行扩容。即int newCapacity = (oldCapacity << 1) + 1;。3) 散列分布方式(计算存储位置):HashMap是先将key键的hashCode经过扰动函数扰动后得到hash值,然后再利用 hash & (length - 1)的方式代替取模,得到元素的存储位置。Hashtable则是除留余数法进行计算存储位置的(因为其默认容量也不是2的n次方。所以也无法用位运算替代模运算),int index = (hash & 0x7FFFFFFF) % tab.length;。由于HashMap的容器容量一定是2的n次方,所以能使用hash & (length - 1)的方式代替取模的方式计算元素的位置提高运算效率,但Hashtable的容器容量不一定是2的n次方,所以不能使用此运算方式代替。4)线程安全(最重要):HashMap 不是线程安全,如果想线程安全,可以通过调用synchronizedMap(Map<K,V> m)使其线程安全。但是使用时的运行效率会下降,所以建议使用ConcurrentHashMap容器以此达到线程安全。Hashtable则是线程安全的,每个操作方法前都有synchronized修饰使其同步,但运行效率也不高,所以还是建议使用ConcurrentHashMap容器以此达到线程安全。
点赞 16
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 10:46
江南大学 Java
实在智能 - Java开发 - 实习二面
自我介绍我看你做了一个抽奖系统,就这个系统实现的时候遇到的最大的困难是什么抽奖系统用的是框架,还是手搓的?(回答手搓的),那说一下实现的细节为什么要用 MQ,它使用的意义在哪?细说一下策略模式和责任链模式在项目中是如何使用的?介绍一下另外一个项目使用 ai 编程的时候有碰到什么问题吗,并且有什么收获吗?项目测试是怎么测的?
查看7道真题和解析
点赞
评论
收藏
分享
昨天 15:14
滴滴_移动端研发工程师(准入职员工)
腾讯内推,腾讯内推码
腾讯IEG 后端开发实习面经流程很快,效率棒棒哒10.10投递,10.11日过初筛,约一面到10.13,10.16就结束hr面了,6天速通一面 10.13挑一个项目讲打开项目github看,对照源码问了些问题Redis 用过什么数据结构Reids怎么实现分布式锁10亿条消息去重说下去会好好看看我的github(开源贡献比较多)算法题二面 10.15聊了下项目一聊了下项目二gmp调度模型go gctcp可靠性有哪些机制大模型的原理兴趣爱好玩啥游戏(金铲铲,暗区突围,王者荣耀,皇室战争,总之腾讯游戏玩的雀实多,也充了不少钱其实)Hr面 10.16等offer中。。10.24 offer腾讯2027...
点赞
评论
收藏
分享
2025-12-29 23:01
江西财经大学 外贸业务员
求一个不把应届生当cs的城市
我真有点想骂人了
脑袋锈住了:
你这算啥,哥们中科院中强所硕士,本科211,叫我去干分拣,时薪20
点赞
评论
收藏
分享
01-07 20:51
门头沟学院 前端工程师
哪些公司在招寒假实习
截至目前仍在招寒假实习的公司如下:1.字节2.bilibili3.美团4.新石器5.淘天6.阿里7.蚂蚁8.小红书9.虾皮10.小米11.哈罗12.快手13.携程14.腾讯15.京东16.卓驭注:以上数据来牛客网,如不准确,请以实际为准。
乌云遇皎月:
感谢总结,字节一直在招
哪些公司在招寒假实习?
点赞
评论
收藏
分享
01-21 17:33
杭州电子科技大学 大数据开发工程师
在抖音上认识的姐姐太疯狂了
在抖音上认识了一位姐姐,我们聊了大半年,一直聊的都很好,突然她提出要见一面,我犹豫了,我说我没有什么钱也不帅,她说她不介意,只做普通朋友,于是我答应了也要了她的照片,普普通通的一个人,看起来不讨厌,她离我的城市不远,我们约在奶茶店见面,没有选择在商场,怕遇到熟悉的人,我先到的,因为她要开车大几个小时,等待时看着照片以为会是“翻车现场”,因为手机都有美颜功能,但是当她走出那辆奔驰车时我一眼就认出他了,她本人比手机上好看多了,也是我特欣赏的类型,她也认出我了,我不知道 该说什么就站在那里,为了打破尴尬,她提议抱一下吧,我说好,但是他很有礼貌的摸了摸我的头喊了我的名字,我一下子脸就红了,心砰砰的直跳...
offer哪里跑__:
直接划到底部,果然
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
牛客吐槽大会 | 有槽不吐,留着过年?吐完领现金红包,痛快!
2629
2
...
J人永远闲不下来于是去提前实习
2366
3
...
拥抱AI,程序员的最后出路
1696
4
...
mentor视角下的优秀实习生
1577
5
...
马斯克最新炸裂采访,AI会带走一半工作岗位,普通人将何去何从?
1546
6
...
大厂提前实习对AI开发的新感悟
1411
7
...
努力挣钱的意义具象化了
1371
8
...
真正会被取代的,是你心里面的幻觉
1360
9
...
去独角兽做龙头还是去大厂做凤尾
1231
10
...
我身材再曼妙,也没有我的工资好笑!
1154
创作者周榜
更多
正在热议
更多
#
牛客吐槽大会
#
1817次浏览
53人参与
#
机械人你知道哪些单休企业
#
82892次浏览
412人参与
#
今年春招是金一银二嘛?
#
6959次浏览
78人参与
#
没关系,至少我的__很曼妙
#
3438次浏览
62人参与
#
1月小结:你过的开心吗?
#
1585次浏览
50人参与
#
赚钱的意义在这一刻具象化
#
3635次浏览
90人参与
#
AI时代的工作 VS 传统时代的工作,有哪些不同?
#
7541次浏览
183人参与
#
抛开难度不谈,你最想去哪家公司?
#
3451次浏览
91人参与
#
为什么有人零实习也能进大厂?
#
4442次浏览
101人参与
#
你的landing期是如何度过的?
#
7715次浏览
144人参与
#
你的第一家实习公司是什么档次?
#
3741次浏览
66人参与
#
当你问AI“你会取代我的工作吗”,它说_?
#
3295次浏览
119人参与
#
参加完秋招的机械人,还参加春招吗?
#
103367次浏览
680人参与
#
机械人春招想让哪家公司来捞你?
#
379061次浏览
3138人参与
#
除了Java,最推荐学什么技术?
#
5226次浏览
135人参与
#
一人一道大厂面试题
#
114033次浏览
1263人参与
#
AI求职实录
#
2651次浏览
77人参与
#
你觉得什么岗位会被AI替代
#
36551次浏览
251人参与
#
在找工作求抱抱
#
1653707次浏览
10964人参与
#
哪些瞬间让你真切感受到了工作的乐趣
#
23189次浏览
100人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务