首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
05-28 00:07
门头沟学院 Python
AI算力公司测开二面
自我介绍压测做了什么,压测是在什么条件下进行的,压测准出标准怎么定的写skill的心得,要注意什么skill为什么不能长企业级Agent的意图识别的作用,具体实现基于openclaw做二次开发从哪里入手openclaw操作本地机器的原理做过什么工作外的Agent、WorkFLow毕设做的什么量化的原理、蒸馏的原理
查看11道真题和解析
点赞
评论
收藏
分享
06-02 11:09
已编辑
武汉理工大学 深度学习
应届生租房踩坑指南:从选址到家电全是你没想到的雷点
作为有租房经验的老手,要租房首先打开租房软件,看想租的地段,交通怎么样,平均租金是多少,比如近郊合租1800-2800元,地铁独卫2500-3500元,核心二居3500-4500元。任何低于市场价30%的房源,可能是虚假引流。找中介,记住三砍。 第一砍房租中介手里的托管房都有议价空间,找毛病、谈长租、打感情牌,通常能再降10%。第二砍中介费——标准是百分之80,签约前必须看房产证原件+房东身份证,转租房必须有原房东书面同意书,否则钱房两空(第三点看我的的评论,有点阴)。找物业,才是真正的省钱杀招。 很多房东懒得自己挂房,直接委托小区物业出租,具体操作:锁定目标小区后,直接去物业前台问"...
我的租房踩坑经历
点赞
评论
收藏
分享
04-27 19:35
萍乡学院 后端工程师
28届学院本,求大佬锐评简历。
这两个项目都是自己vibe coding出来的,简历是AI生成优化的,其中还有很多东西是不懂的。求大佬指点🙏🥹
程序员小白条:
vibe你只要能cover住面试官问你很多深入的实现和选型方案的原因,以及怎么去检测优化效果的就行了
点赞
评论
收藏
分享
05-22 11:44
贵州大学明德学院 产品经理
求内推 求职
BOSS,智联都刷烂了,求内推、求职女 22岁最高学历:本科期望薪资待遇:4-6K,五险一金运营岗位,新媒体商务求个机会,谢谢!求求能不能帮忙指一下简历的问题
点赞
评论
收藏
分享
06-01 17:09
云南大学 自然语言处理
27大模型求职全记录 Day1
写在前面:主包是一名27届非科班零基础转码大模型应用开发岗今天是2026.6.1处于暑假实习和秋招提前提的节点,使用这个帖子来记录从此时到未来秋招或者春招达到offer的全流程。未来的求职面试经验offer选择八股学习都会在这个帖子更新。尽量做到每日更新今日学习内容:技术:多agent理论八股总结--明天结合视频对笔记补充-后天进行完整的掌握--预计用时3天项目1梳理完整--计划7天掌握包括面试QA和代码leetcode:默写三道 反转+回文+合并俩个有序链表
我的求职进度条
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
在🦢实习,我总结了下ai应用开发学习路线
3.0W
2
...
或许没有真正意义上的上岸...
7370
3
...
发现一个好东西
6789
4
...
应届生租房踩坑指南,全是雷点😭
6209
5
...
我在北京3年6次租房的经历
4275
6
...
家里说托关系能进体制内
2938
7
...
26 届最后一个月了,依旧 0offer,毕业干啥去呢😥
2881
8
...
我的一年,做了什么
2724
9
...
给三个月前的自己写封信,关于找实习
2370
10
...
27届前端实习第一次面试 磐松私募
2171
创作者周榜
更多
正在热议
更多
#
我的实习日记
#
4147704次浏览
33222人参与
#
你投了多少家公司?进展是___
#
252820次浏览
1491人参与
#
第3届现代汽车Code Faster急速编程挑战赛
#
27523次浏览
482人参与
#
秋招投递记录
#
430110次浏览
3320人参与
#
你投递的公司有几家约面了?
#
175287次浏览
1048人参与
#
城市生存手册
#
1476次浏览
20人参与
#
今年形式下双非本找得到工作吗
#
340154次浏览
1797人参与
#
重来一次,你会对开始求职的自己说
#
55511次浏览
517人参与
#
秋招提前批,你开始投了吗
#
772805次浏览
8500人参与
#
你认为小厂实习有用吗?
#
153527次浏览
810人参与
#
实习返校后,你的精神状态是__?
#
47822次浏览
174人参与
#
通信/硬件求职避坑tips
#
179852次浏览
1178人参与
#
为了找工作你投递了多少公司?
#
122901次浏览
774人参与
#
产品实习,你更倾向大公司or小公司
#
234980次浏览
2169人参与
#
这个工作能去吗
#
184398次浏览
961人参与
#
你开始找寒假实习了吗?
#
110450次浏览
633人参与
#
聊聊你的职场新体验
#
364078次浏览
1939人参与
#
我的租房踩坑经历
#
232392次浏览
1343人参与
#
实习生的生存小技巧
#
42257次浏览
366人参与
#
如何看待应届生身份?
#
261455次浏览
2364人参与
#
你找工作想离家近 or 离家远?
#
55294次浏览
403人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务