问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么面试要问hashmap 的原理

发布网友 发布时间:2022-03-29 14:05

我来回答

1个回答

热心网友 时间:2022-03-29 15:34

HashMap
的工作原理

HashMap
,都知道哪里要用
HashMap
,知道
Hashtable

HashMap
之间的区别
,那么
为何这道面试题如此特殊呢?是因为这道题考察的深度很深。
这题经常出现在高级或中高级
面试中。投资银行更喜欢问这个问题,甚至会要求你实现
HashMap
来考察你的编程能力。
ConcurrentHashMap
和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的
旅程吧!

先来些简单的问题

“你用过
HashMap
吗?”

“什么是
HashMap
?你为什么用到它?”

几乎每个人都会回答“是的”,然后回答
HashMap
的一些特性,譬如
HashMap
可以接

null
键值和值,而
Hashtable
则不能;
HashMap
是非
synchronized;HashMap
很快;
以及
HashMap
储存的是键值对等等。
这显示出你已经用过
HashMap

而且对它相当的熟
悉。但是面试官来个急转直下,从此刻开始问出一些刁钻的问题,关于
HashMap
的更多
基础的细节。面试官可能会问出下面的问题:

“你知道
HashMap
的工作原理吗?”

“你知道
HashMap

get()
方法的工作原理吗?”

你也许会回答“我没有详查标准的
Java API
,你可以看看
Java
源代码或者
Open JDK
。”
“我可以用
Google
找到答案。”

但一些面试者可能可以给出答案,

HashMap
是基于
hashing
的原理,
我们使用
put(key,
value)
存储对象到
HashMap
中,使用
get(key)

HashMap
中获取对象。当我们给
put()
方法传递键和值时,
我们先对键调用
hashCode()
方法,
返回的
hashCode
用于找到
bucket
位置来储存
Entry
对象。”这里关键点在于指出,
HashMap
是在
bucket
中储存键对象和

值对象,作为
Map.Entry
。这一点有助于理解获取对象的逻辑。如果你没有意识到这一点,
或者错误的认为仅仅只在
bucket
中存储值的话,
你将不会回答如何从
HashMap
中获取对
象的逻辑。这个答案相当的正确,也显示出面试者确实知道
hashing
以及
HashMap
的工
作原理。但是这仅仅是故事的开始,当面试官加入一些
Java
程序员每天要碰到的实际场景
的时候,错误的答案频现。下个问题可能是关于
HashMap
中的碰撞探测
(collision
detection)
以及碰撞的解决方法:

“当两个对象的
hashcode
相同会发生什么?”

从这里开始,真正的困惑开始了,一些面
试者会回答因为
hashcode
相同,
所以两个对象是相等的,
HashMap
将会抛出异常,
或者
不会存储它们。然后面试官可能会提醒他们有
equals()

hashCode()
两个方法,并告诉他
们两个对象就算
hashcode
相同,但是它们可能并不相等。一些面试者可能就此放弃,而
另外一些还能继续挺进,他们回答“因为
hashcode
相同,所以它们的
bucket
位置相同,
‘碰撞’会发生。因为
HashMap
使用
LinkedList
存储对象,这个
Entry(
包含有键值对的
Map.Entry
对象
)
会存储在
LinkedList
中。”这个答案非常的合理,虽然有很多种处理碰撞
的方法,这种方法是最简单的,也正是
HashMap
的处理方法。但故事还没有完结,面试
官会继续问:

“如果两个键的
hashcode
相同,
你如何获取值对象?”

面试者会回答:
当我们调用
get()
方法,
HashMap
会使用键对象的
hashcode
找到
bucket
位置,然后获取值对象。面试官
提醒他如果有两个值对象储存在同一个
bucket

他给出答案
:
将会遍历
LinkedList
直到找到
值对象。
面试官会问因为你并没有值对象去比较,
你是如何确定确定找到值对象的?除非面
试者直到
HashMap

LinkedList
中存储的是键值对,否则他们不可能回答出这一题。

其中一些记得这个重要知识点的面试者会说,
找到
bucket
位置之后,
会调用
keys.equals()
方法去找到
LinkedList
中正确的节点,最终找到要找的值对象。完美的答案!
为什么面试要问hashmap 的原理?

“HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。从这里开始,真正的困惑开始了,一些面试者会回答因为hashcode相同,所以两个对象是相等的,HashMap将会抛出异常,或者不会存储它们。然后面试官可能会提醒他们有equals()和hashCode两个方法,...

Java面试——话术:HashMap底层及相关知识点汇总

HashMap的工作原理是基于散列和链表或红黑树的机制,通过计算哈希值确定存储位置。为了减少碰撞,可以优化hashCode实现、使用不可变对象和合适的equals方法。选择红黑树而非二叉查找树,是因为红黑树能保持查询性能。当负载因子达到一定阈值,HashMap会扩容并重新调整。多线程环境需注意并发调整大小可能引发死循环。

java中HashMap和HashTable面试题问题,为什么hashmap是属于异步的呢?并...

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,实...

面试中如何回答HashMap的工作原理

hashmap是接受null值的,null值被放在数组的第一个元素当中,取出来的时候怎么处理呢?hashmap的工作原理?它的里面有一个Entry数组,在put时我们先根据key值计算出hashcode,进而计算出该元素在数组中的位置,将健值对封装在Map.Entry对象中,然后存储在数组中 若产生hash冲突怎么办?每个数组元素的位置...

HashMap实现原理

为了解决这个问题,HashMap引入了扩容与负载因子。以下是和扩容相关的一些概念和解释:Ps: 扩容要重新计算下标 , 扩容要重新计算下标 , 扩容要重新计算下标 ,因为下标的计算和数组长度有关,长度改变,下标也应当重新计算。在1.8及其以上的jdk版本中,HashMap又引入了红黑树。红黑树的引入被用于替换...

HashMap和HashSet的区别

1 HashMap和HashSet的区别是Java面试中最常被问到的问题。如果没有涉及到Collection框架以及多线程的面试,可以说是不完整。而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整。HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现...

java面试题详解(java面试题简书)

在看面试题的过程,你会遇到一些自己没接触过的或者以前没深入学习过的知识,例如最常问的HashMap内部实现原理,这就促使你得开始去看jdk的源码或者是学习一些新的东西。看源码是很重要的一步,起步很难,但是会让你收益良多,看源码的过程如果碰到无法理解的地方,可以百度看下别人的理解。我学习源码的过程中,看过几个...

为什么HashMap会产生死循环

HashMap死循环是一个比较常见、也是比较经典的面试题,在大厂的面试中也经常被问到。HashMap的死循环问题只在JDK1.7版本中会出现,主要是HashMap自身的工作机制,再加上并发操作,从而导致出现死循环。JDK1.8以后,官方彻底解决了这个问题。1、数据插入原理在分析原因之前,我先带大家了解一下JDK1.7中...

3分钟轻松理解单线程下的HashMap工作原理

1、HashMap中的关键属性要透彻理解HashMap原理,首先需要对以下几个关键属性有一个基本的认识。我们看到,HashMap的源码片段:第一个属性??loadFactor,它是负载因子,默认值是0.75,表示扩容前?。第二个属性??threshold?它是记录HashMap所能容纳的键值对的临界值,它的计算规则是负载因子??乘以?数组...

我的百度面经(共8次面试)

面试官说不是,引导说用栈实现递归。 问我栈中需要压入哪些数据。他说应该是方法参数,返回值,以及返回地址。 二面: 1 自我介绍,项目 10分钟过去 2 服务器如何负载均衡,有哪些算法,哪个比较好,一致性哈希原理,怎么避免DDOS攻击请求打到少数机器。 3 TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作...

hashmap原理面试 面试hashmap底层实现原理 java中hashmap的原理 hashmap的原理 hashmap的原理和实现 javahashmap实现原理 hashmap的底层实现原理 hashmap 面试 hashmap面试题
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮我推荐个本本吧~ 预算大概在4000左右(上下浮动500元)主要看性价比我... 想买台笔记本,请问华硕N75的性价比怎么样,如果不行麻烦推荐一台6000... 关于暑假买笔记本电脑……电脑达人进 宏基6930G玩魔兽世界能开几个小时,会很热么?烫手不? 宏碁(Acer)型号MS2130 驱动 石磊发表论文 朱龙生履历 贺瑞麟烈士贺瑞麟 石磊最年轻正处级 共青团南京市委大事记 AMR式15毫米狙击枪,在射击的时候怎么也会出现卡壳... AMR狙击枪枪怎么画 AMR-212.7毫米大口径狙击步枪的研制时遇到的四大难题 AMR-2狙击步枪的国产AMR2狙击步枪性能 AMR-212.7毫米大口径狙击步枪的AMR-2的精工之处 AMR-2狙击步枪的外媒评价 AMR-2狙击步枪的介绍 有谁知道AMR-2这把国产的狙击步枪白?越详细越好~ Amr狙击枪怎么画? AMR-2狙击步枪的特点 AMR-212.7毫米大口径狙击步枪的介绍 amr狙击枪英文怎么读 AMR-2狙击步枪的简介 amr狙击枪什么时候上线正式服 awr是什么狙击枪? amr和巴雷特的关系 和平精英amr在哪个地图 《使命召唤》amr狙击枪是巴雷特吗? amr狙击枪是巴雷特吗? 知道支付宝付款码能找到他本人吗? 电脑打开app很慢怎么回事 电脑打开软件都是特别字母,怎么解决? 为什么电脑打开软件总是非常慢而且卡。有什么解决... 电脑打开软件速度很慢,经常无响应。怎么办? 电脑反应慢啊,特别是打开软件,打开磁盘,,、 为什么我的电脑打开的软件界面特别大 电脑开机很快打开软件很慢咋回事? 为什么我的电脑开机进入桌面过后,打开软件的速度... 电脑打开软件速度特别慢,但打开后运行极速流畅,... 为什么我电脑打开软件很慢 为什么电脑桌面经常自己出现一些软件,特别是游戏... 如何去掉玻璃门上的顽固水渍? 玻璃水渍怎么去除? 玻璃上水渍如何清除 玻璃上水渍印怎么去除 玻璃上的水印,擦不掉,怎么办? 轿车车窗玻璃上的顽固水渍、水痕,求教去除方法。 如何清除玻璃杯上的水渍 玻璃上的水痕怎么清除 洗澡间玻璃门总是有水渍,怎么清洁效果好呢?