携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情
目录
HashMap 底层是采用什么算法来实现 的 ?
好,我们前面几篇文章,讲了HashMap相关的数据结构:数组和链表,
那既然大家已经知道,这些点了之后呢,那接下来就跟大家去讲一讲其他的,
我们现在已经具备了有这个数据结构了。那接下来我们来讲一下算法。为什么?
就是说我们讲过,数据结构+算法=程序,那么我们既然已经了解了,我们HashMap的数据结构,
那我想问一下,你们知道 HashMap 底层是采用什么算法来实现的吗?
如果在面试官面试的时候问到这个点,你会怎么去作答?用什么?大家有没有听说过一个哈希算法!
哈希算法底层是怎么去实现的 ?
那这个算法底层是怎么去实现的呢?
来同学,我在这里呢,给大家来列举一下啊,哈希算法到底是什么样的一个算法?
我相信很多同学是不知道哈希算法的底层是采用什么实现的?
对吧,这就是能反映你们底层的技术能力,就你们了解到的点都是比较片面的。
哈希算法 的定义
那我在这里先跟大家去讲一讲,哈希算法,他的一些定义吧,
讲完定义之后,我再去讲他的一些实现。
哈希算法也叫散列算法,就是把任意长度这个key呢,通过这个算法呢,变成一个固定的这个key,
然后通过这个key,去进行访问,的一种结构。
那这个哈希算法的目的呢,就是通过啊生成一个固定这个key,然后去快速去定位这个节点,
所以它的目的就是为了去加快查找的速度。
哈希算法举例,下标是如何快速定位的?
那这里呢,我举一个例子,比如我们现在这里呢,要选一个 lies 这个英文名字啊,那么我们通过哈希算法,
我们就可以算出来它的下标呢,就会让它定为下标等于9,这个位置,就等于lies。
好了,我们现在在这里就要去,重点去琢磨一下,我们通过输入一个英文名,
他怎么样快速去定位到下标等于9呢?
那这就是我们要去研究,这个哈希算法,它底层是怎么去实现的?哈希code
这个哈希code呢,稍微有一点点意思,那我就问一下哈希code是怎么实现的呢?
这个你说 HashMap中的哈希算法,它底层是采用哈希code来实现,那我想问一下 哈希code的底层是什么实现?
哈希code 的底层 是怎么实现的 ?
那哈希code它又是怎么去实现的呢?
MD5加密
那接下来跟大家去讲,哈希算法有很多种实现,但是我相信大家应该知道一个MD5,
比如说我们经常输入用户名和密码,这个密码在我们数据库里面,他是加密的,
而我们在登录的时候,我们输入是明文,但是我们存在数据库里面呢,是已经被MD5加密过的一个数据,
而这个MD5他底层其实就是散列算法。
比特币技术
像包括我们现在比较火的一些技术,比如像我们的比特币的这个技术,像我们去挖矿啊,
包括我们去挖矿挖到这个币,为什么这个币啊,只要你有私钥之后,
你就不会被盗,其实他底层就是采用这个哈希算法,
也就是说哈希算法它具有具备一个特性,就是幂 等性的特性。
那 什么是幂等性?
就好比,我从我出生的时候,我就有一个身份证号,这个身份证号无论从我出生到我生命的结束,
这个号都永远都不会改变,只要输入我这个号就能找到我这个人,这个就是幂等性。
OK,那这样的话就是这个哈希算法,它就需要具备这样的一个特点,
所以我们这个特点的话,MD5它是具备这个特性,但大家你们知道,
除了MD5,在我们所学的知识点,还有哪一个是可以实现这种幂等性吗?
ascii码计算
ascii 码实现了幂等性。这样的话,你就知道它的算法底层是采用什么实现的,有一个点大家应该知道,
用一个最简单的,我们用什么呢?我们用他的 ascii 码。
那这个ascii码呢,我们大家都知道,每一个英文字母它都有对应的ascii码。
比如存这个人的名字,那么我们先把这个人的名字呢,我把它拆解,把每个字母他们的ascii码取出来,
那这里有一个程序给大家去看一下,你看在这里呢,我就把这个人的名字,然后进行它这个数组循环,把每一个ascii码算出来,
那我们可以发现,像我们这里每一个英文,你比如像 l 它对应108;i 对应105;e 对应101;s 对应115,
这就是这几个字母它们的ascii码,然后呢,我通过这几个ascii码呢,对它进行相加,那它呢,就等于429
取模计算,确定下标
然后呢,我用429之后呢,我再进行取模。
我现在来问大家一个点,就我用这个429呢,我去模拟取模10,那么它下标,就等于确定到这个9,这个位置。
好,那这里呢,它取模具体解决什么问题呢?
接下来,下一篇文章:我们将介绍 取模具体解决什么问题、哈希冲突 等