java源码系列:HashMap底层存储原理详解——4、技术本质-原理过程-算法-取模具体解决什么问题

本文探讨了HashMap中取模运算的重要性。取模解决了通过ASCII码或哈希算法计算出的数组下标可能超出默认数组长度的问题,避免了因创建过大数组导致的空间浪费。取模运算确保下标保持在HashMap默认的16个槽位之内,从而节省空间并保证数据存储的有效性。下篇文章将讨论取模带来的其他问题。
摘要由CSDN通过智能技术生成

目录

简介

取模具体解决什么问题?

通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间

取模,可保证下标,在HashMap默认创建下标之内


简介

上一篇文章,我们讲到 哈希算法、哈希code、ascii码计算、取模计算确定HashMap的下标等等内容,

详细内容可查看博文:

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

这篇文章我们将介绍 取模解决什么问题?等等内容

取模具体解决什么问题

用这个429呢,我去模拟取模10,那么它下标,就等于确定到这个9,这个位置

OK,同学们,那我想问一下,为什么这里要取模?

 同学们来告诉我,或者说我们经常讲到的,位运算!为什么要做这个位运算?为什么要取模?你们知道原因是什么吗?

有没有同学能回答上来?它不是地址冲突。

通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间

我跟大家去讲,是这样的,我们要记住刚才我们数组它的一个特点是什么?

它是从0开始的,它是以此递增的,数组它一个特性就是连续。连续,你要记住这个点,

那什么是连续呢?就说我这里是等于429,那我们这个lies呢,它就会存在这个429这个位置上,这个人的这个名字,对吧!

这个人他就会存在429,而我们数组它需要连续,连续的话,我们又是从0开始的,如果是根据这两个特性的话,

我们必须要从0存到429,那下一个值这里就428,以此类推。

同学们,我们想象一下,我就只要存这一个人的名字,但是我要创建0到429,相当于430个长度的数组,是不是非常占用空间啊。

取模,可保证下标,在HashMap默认创建下标之内

浪费你电脑上的空间,所以在这个地方我们为什么要去取模的原因,就是为了去节省这个数组的一个空间。

因为我们 HashMap默认创建的数组的长度就等于16,我们去存的数据,

它都是比较,每个算出他们MD5的这个码,或者是ascii码,算出来这个值,它肯定都会大于16,

那为什么需要进行取模或需要进行位运算,目的就是让我们这个值,会存到我们这个0到15这个之间上面来,

这就是为什么要做这个取模操作,目的就是为了去节省空间,OK,那我们现在就知道取模的一个目的。

取模具体解决什么问题?为了去节省数组的空间,让我们这个值,在HashMap默认创建数组的长度16之内

好,就写到这里。 这篇文章,介绍了 取模具体解决什么问题?下一篇文章将 介绍取模带来什么问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

被开发耽误的大厨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值