java源码系列:HashMap底层存储原理详解——3、技术本质-原理过程-算法-哈希算法、哈希code、ascii码计算、取模运算等

目录

HashMap底层是采用什么算法来实现的?

哈希算法底层是怎么去实现的?

哈希算法的定义

哈希算法举例,下标是如何快速定位的?

哈希code的底层是怎么实现的?

MD5加密

比特币技术

那什么是幂等性?

ascii码计算

取模计算,确定下标


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,这个位置。

好,那这里呢,它取模具体解决什么问题呢?

接下来,下一篇文章:我们将介绍  取模具体解决什么问题、哈希冲突  等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值