目录

简介

取模具体解决什么问题?

通过数组特性,推导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之内

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

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

  1. Java集合源码系列(1)---- ArrayList详解

    目录 属性 构造函数 无参构造函数 含参构造(int initialCapacity) 含参构造(Collection c) add方法 add(E e) add(int index, E eleme ...

  2. java 源码系列 - 带你读懂 Reference 和 ReferenceQueue

    java 源码系列 - 带你读懂 Reference 和 ReferenceQueue https://blog.csdn.net/gdutxiaoxu/article/details/8073858 ...

  3. Java源码之HashMap

    Java源码之HashMap 转载请注明出处:http://blog.csdn.net/itismelzp/article/details/50525647 一.HashMap概述 HashMap基于 ...

  4. Mybatis源码学习(三)SqlSession详解

    前言 上一章节我们学习了SqlSessionFactory的源码,SqlSessionFactory中的方法都是围绕着SqlSession来的.,那么SqlSession又是什么东东呢?这一章节我们就 ...

  5. Caddy源码阅读(一)Run详解

    Caddy源码阅读(一)Run详解 前言 本次系列会讲解 caddy 整个生命周期涉及到的源码. 平时我们使用 caddy 都是使用 它的 二进制 分发文件,现在来分析 caddy 的 Run 函数. ...

  6. centos7 mysql 源码安装_CentOS7.4 源码安装MySQL8.0的教程详解

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以下为本人2018.4.23日安装过程的记录.整个过程大 ...

  7. 仿抖音短视频APP源码,顶部导航栏切换详解

    仿抖音短视频APP源码,顶部导航栏切换详解的相关代码 class DaoHangNan extends StatefulWidget //继承StatefulWidget{TabController ...

  8. 华为OD机试(21-40)老题库解析Java源码系列连载ing

    华为OD机试算法题新老题库练习及源码 老题库 21.字符串序列判定 22.最长的指定瑕疵度的元音子串 23.处理器问题 24.单向链表中间节点 25.字符串重新排列.字符串重新排序 26.完美走位 2 ...

  9. 手撕Java源码系列之Map接口

    Map简介 #Map是以Key和Value进行存储的,这点就是与Collection做一个区别.Map的Key不可重复,但是value可以重复.而Collection最直观的感受就是其子接口Set,仅 ...

最新文章

  1. ++项目 cmake头文件路径_CMAKE入门实战
  2. [转载] 晓说——第18期:古代科举考试那些事——招生
  3. 【转】linux su和sudo命令的区别——百度知道
  4. [zz]grep 命令的使用
  5. netty java开发文档_《Netty官方文档》设置开发环境
  6. 三次握手wireshark抓包分析,成功握手和失败握手
  7. 管理老板,让他乖乖给你涨工资
  8. 新年第一天,人好多啊。
  9. 根据日志统计出每个用户在站点所呆时间最长的前2个的信息
  10. 解决办法:发生故障,这可能是有软件包被要求保持现状的缘故
  11. 使用create-keyframe-animation实现js动画
  12. av_rescale_rnd计算原理
  13. 如何运行element ui
  14. [vue-router] Named Route ‘Layout‘ has a default child route. When navigating to this named route (:t
  15. 程序员的自我修养--链接、装载与库笔记:第一章温故而知新
  16. html 字加白色透明,如何给网站背景加一个白色的透明文字
  17. 【Go-Lua】Golang嵌入Lua代码——gopher-lua
  18. LA@二次型和标准化
  19. found dwarf version #039;4#039; linux,开发一个Linux调试器(四):Elves和dwarves
  20. ML:LGBMClassifier、XGBClassifier和CatBoostClassifier的feature_importances_计算方法源代码解读之详细攻略

热门文章

  1. Debian Epson L455 打印机
  2. 树莓派4b 安装摄像头
  3. 计算机改变生活英语作文,改变我们的生活英语作文
  4. 常见的Eclipse排版设置
  5. 二维堆叠 matlab,matlab二维数组与三维数组叠加问题
  6. tomcat9使用crt格式证书配置HTTPS
  7. 8.4 小波变换分解与重构算法
  8. 缺血性脑卒中对大脑功能连接梯度的影响
  9. 数学建模系列-预测模型(四)马尔可夫预测
  10. Kafka知识总结之消费者简单使用