hashmap底层原理

hashmap是由数组+链表构成的,在数组里面嵌套了链表,链表使用的结构为头插法。链表里面可以放多个entry即key, value防止冲突。#Java工程师面试常考题##学习路径#
全部评论
https://zhuanlan.zhihu.com/p/76735726
2 回复 分享
发布于 2021-05-17 03:43
两个常用的方法:hashmap.put和get
点赞 回复 分享
发布于 2021-05-17 03:09
hashmap的默认初始长度为16,每次自动扩展或者手动扩展时,长度必须是2的幂
点赞 回复 分享
发布于 2021-05-17 03:11
对于HashMap,我们最常使用的是两个方法:Get 和 Put。 1.Put方法的原理 调用Put方法的时候发生了什么呢? 比如调用 hashMap.put("apple", 0) ,插入一个Key为“apple"的元素。这时候我们需要利用一个哈希函数来确定Entry的插入位置(index): index = Hash(“apple”)
点赞 回复 分享
发布于 2021-05-17 03:14
如何实现一个尽量均匀分布的Hash函数呢?我们通过利用Key的HashCode值来做某种运算。 位运算的方式实现:(Length是HashMap的长度): index = HashCode(Key) & (Length - 1)
点赞 回复 分享
发布于 2021-05-17 03:16
下面我们以值为“book”的Key来演示整个过程: 1.计算book的hashcode,结果为十进制的3029737,二进制的101110001110101110 1001。 2.假定HashMap长度是默认的16,计算Length-1的结果为十进制的15,二进制的1111。 3.把以上两个结果做与运算,101110001110101110 1001 & 1111 = 1001,十进制是9,所以 index=9。 可以说,Hash算法最终得到的index结果,完全取决于Key的Hashcode值的最后几位。
点赞 回复 分享
发布于 2021-05-17 03:18
如果不是2的幂,会导致不均匀。只要是2的幂,并且保证hashcode是均匀分布的,那么得出的结果就是均匀的
点赞 回复 分享
发布于 2021-05-17 03:20
第一:当length为2的N次方的时候,h & (length-1) = h % length 为什么&效率更高呢?因为位运算直接对内存数据进行操作,不需要转成十进制,所以位运算要比取模运算的效率更高 第二:当length为2的N次方的时候,数据分布均匀,减少冲突 此时我们基于第一个原因进行分析,此时hash策略为h & (length-1)。
点赞 回复 分享
发布于 2021-05-17 03:34
https://mp.weixin.qq.com/s/-xFSHf7Gz3FUcafTJUIGWQ
点赞 回复 分享
发布于 2021-05-17 03:42

相关推荐

哈喽啊牛u们,这篇文章主要讲述一下这段时间投递简历以来的经历吧,当个乐子看看就好。本人bg 双非 26 届,只有一些蓝桥杯国奖和天梯赛国奖,找的是java后端开发日常实习。时间线:10 月初事件:八股文和算法已经准备了一段时间了,后续将初步完善的项目写入到简历中,观摩牛u们的简历写法,将优化后的简历开始往中厂官网投递➕boss小厂投递。投了近两周吧,中厂基本没笔试面试机会(投了 10 几家),小厂大多数看到我是 26 届的基本已读不回。后来觉得可能是简历问题,于是又花了几天去优化简历(感觉项目问题挺大,后续换了个项目并且自己扩展了一部分)。时间线:10 月中旬事件:找了个佬看了下简历,佬说没啥问题之后,我就开始投了(感谢佬给了我信心)。这次目标只有小厂,于是接下来的两周在boss上投了近 100 份,陆续开始约到了笔试和面试了(可能是月份的原因)。时间线:11 月 10 号左右事件:这段时间大概约到了四个厂的笔试面试,只有一个厂的二面挂了(投成校招了)。离谱事件:其中两个厂都没有hc,只有一个奴隶小厂给我offer(后续还会提到!)。仔细看了下奴隶小厂,实在太黑奴了(实习生发月薪,一个月 2k,是 1.5k➕500,这 500 每个月都发,如果实习不满半年,那么这几个月发的 500 都需要被扣回去),于是一直在等下一个offer(与此同时,同学还收到了当地某公司的投资吧,打算拉我入伙做开发(当时心动了一下,还好后面跟他说过两天给答复))。极其幸运事件:就在同学跟我说完的后一天,上一个没有hc的厂,因为那个实习生跑路了,所以多出来了一个hc,boss上沟通的hr在周六上午 10 点多 给我打电话(还好把我吵醒了(睁开眼的时候以为是哪里的骚扰电话),没接的话感觉世界时间线都变了),于是接了offer在一周内入岗(待遇比奴隶小厂好不少,还是发的日薪)。这边感谢那个打我电话的hr非常感谢x10最近的感受:一直不知道下一场面试是什么时候,只能一直在准备。准备八股文和算法的过程感觉是十分枯燥的,还好最后有厂愿意给双非🐭🐭一个机会最后的心情:感觉十分幸运x3, 但是第一次逃离学校去租房生活,感到有些忐忑。同时,对第一次入职也感到一丝的兴奋。也不知道啥时候被学校喊回去😂 #实习工作,你找得还顺利吗?#
点赞 评论 收藏
分享
评论
6
15
分享
牛客网
牛客企业服务