首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-21 23:28
门头沟学院 前端工程师
都2026年了,React源码还值不值得读
随着前端技术生态的不断演进,React 作为目前最流行的前端框架之一,已经走过了十多个年头。在 2026 年这个时间节点,很多开发者都在思考一个问题:React 源码还值不值得深入阅读?这个问题的答案并不是简单的"是"或"否",而需要从多个维度进行分析。本文将从实际价值、学习成本、技术趋势等角度,为你提供一个全面的分析。为什么曾经值得读 React 源码?在讨论"现在是否值得"之前,我们先回顾一下为什么 React 源码曾经被认为是值得学习的经典。React 引入了很多开创性的概念:虚拟 DOM(Virtual DOM)虽然现在已不是...
点赞
评论
收藏
分享
01-25 20:43
上海交通大学 算法工程师
莉莉丝游戏策划:阴阳师为何能持续运营?
面试题简述阴阳师已经上线很多年了,你觉得它为什么还能持续运营?如果从策划角度分析,你认为它的核心支撑点是什么?面试官想听的是什么1、你是否能对成熟产品做结构化拆解2、你是否理解长期运营型产品和短期爆款的本质差异3、你是否站在策划视角,而不是玩家视角面试回答举例我认为阴阳师能够长期运营,并不是因为某一个玩法或某一次成功更新,而是它在产品设计之初就把长期运营作为前提条件。详细请参考:http://xhslink.com/o/68UkQYX3pfG由浅入深分析很多上线多年的游戏失败,往往不是因为玩法不够新,而是因为结构不支持长期扩展。常见问题包括:1、世界观封闭,新内容只能靠数值堆叠2、玩家与角色之...
查看2道真题和解析
点赞
评论
收藏
分享
2025-12-23 16:48
深圳大学 前端工程师
27届前端简历求拷打
准备背一下八股投简历找实习,问下大佬们还有什么地方需要优化
滋生之父:
佬感觉你这个大厂没问题啊
点赞
评论
收藏
分享
2025-12-20 21:40
已编辑
门头沟学院 Java
27届NPC鼠鼠 求拷打
双非本 一段小厂 寒假能够冲击中厂吗 求简历拷打。求各位牛友指点一下,想在寒假海投冲一下中厂有没有机会,简历有没有需要修改的地方
123123d:
简历还没有你的照片清晰,你到底是来秀照片,还是改简历的
点赞
评论
收藏
分享
01-22 12:55
阿里云_研发工程师JAVA(准入职员工)
shein内推,shein内推码
整体的感受还是拆分四个板块吧 1.个人成长-目前业务也在快速扩张期,有很多空白板块可以继续进行搭建,所以在背靠跨境的业务的同时也是可以积累非常可视化的经验,数据分析,项目管理,团队管理,绩效达成落地方案,都是必须需要掌握的技能 2.工作氛围-没有PUA也没有精神内耗,团队偏年轻化领导接近一线业务,没有精神鸿沟的同时具有亲和力的,下班时间和同事相处十分融洽,所以从整体感受来讲会比较轻松 3.福利待遇-位置在四海城附近整体周围的基础设施还是比较齐全,附近大型商场,免费下午茶 4.思维转变-从怕犯错再到勇于去尝试,只要在shein能够有想法且方案足够落地,即使会有踩坑,环境上大家还是比较包容,且结果...
SHEIN希音公司福利 350人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
牛客吐槽大会 | 有槽不吐,留着过年?吐完领现金红包,痛快!
5580
2
...
拥抱AI,程序员的最后出路
2367
3
...
J人永远闲不下来于是去提前实习
2166
4
...
真正会被取代的,是你心里面的幻觉
2055
5
...
马斯克最新炸裂采访,AI会带走一半工作岗位,普通人将何去何从?
1816
6
...
大厂提前实习对AI开发的新感悟
1737
7
...
每天都在被动加班
1546
8
...
努力挣钱的意义具象化了
1539
9
...
为什么说AI时代,老人反而没有新人吃香?
1502
10
...
mentor视角下的优秀实习生
1474
创作者周榜
更多
正在热议
更多
#
赚钱的意义在这一刻具象化
#
3001次浏览
72人参与
#
哪些瞬间让你真切感受到了工作的乐趣
#
23133次浏览
98人参与
#
今年春招是金一银二嘛?
#
4279次浏览
52人参与
#
AI求职实录
#
2139次浏览
61人参与
#
1月小结:你过的开心吗?
#
1039次浏览
32人参与
#
你的第一家实习公司是什么档次?
#
2857次浏览
51人参与
#
抛开难度不谈,你最想去哪家公司?
#
2314次浏览
64人参与
#
为什么有人零实习也能进大厂?
#
3229次浏览
71人参与
#
AI时代的工作 VS 传统时代的工作,有哪些不同?
#
6380次浏览
146人参与
#
你的landing期是如何度过的?
#
6093次浏览
105人参与
#
工作后会跟朋友渐行渐远吗
#
57715次浏览
411人参与
#
除了Java,最推荐学什么技术?
#
4340次浏览
115人参与
#
当你问AI“你会取代我的工作吗”,它说_?
#
2417次浏览
80人参与
#
汇川技术求职进展汇总
#
177670次浏览
1055人参与
#
我是XXX,请攻击我最薄弱的地方
#
55699次浏览
388人参与
#
选offer应该考虑哪些因素
#
139862次浏览
983人参与
#
你觉得什么岗位会被AI替代
#
36258次浏览
249人参与
#
如果工作一直消耗情绪还要继续做吗
#
18527次浏览
88人参与
#
你上一次加班是什么时候?
#
128903次浏览
737人参与
#
非技术岗简历怎么写
#
284138次浏览
3185人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务