目录
通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间
简介
上一篇文章,我们讲到 哈希算法、哈希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之内
好,就写到这里。 这篇文章,介绍了 取模具体解决什么问题?下一篇文章将 介绍取模带来什么问题?