Java基础-hashMap原理剖析

                                  作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

一.什么是哈希(Hash)

  答:Hash就是散列,即把对象打散。举个例子,有100000条数据,我们通过哈希将这10万条数据分别存放在不同的分区中,假设是平均分成了10分,那么每个分区的数据就是1万条数据,当我们要在这10万条数据中查询一条记录时,我们只需要确定这个元素在那个分区,然后去这个指定的分区查询我们想要的元素。这个过程理想情况下可以帮我们检索掉“(n-1)/n”的数据,也就是说原来要在10万条数据中查找某个元素,由于我们通过哈希分过区之后,就只需要确定元素在哪个分区,然后在这个分区中找这个元素,而查找这个元素我们只需在指定分区(1万条数据)查找即可。从而帮我们过滤掉“(n-1)/n”数据量的查询!

二.HashMap的组成部分

  HashMap从本质上来说,是数据和链表的结合体,数组的长度就是桶的个数,而每个数组元素存储的都是一个链表!大致结果如下图所示:

三.put过程分析

1>.查看HashMap的put方法其实是调用putVal方法

2>.查看新哈希hash(key)的过程

3>.hashmap中判断key是否存在的算法

4>.hashmap中判断key是否存在的详细步骤如下

三.hashMap key设计过程考察

转载于:https://www.cnblogs.com/yinzhengjie/p/9255599.html

Java基础-hashMap原理剖析相关推荐

  1. java基础--java中HashMap原理

    java中HashMap原理 内推军P21 P22 1.为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表 ...

  2. java原理教程,java基础之运行原理(一),java基础运行原理

    java基础之运行原理(一),java基础运行原理 java的核心配置:JDK JDK主要包括三个部分 1.Jre:java的运行环境 2.Java的工具:java的编译器(java.c.exe). ...

  3. Java基础 HashMap实现原理及方法

    1.什么是HashMap? HashMap通常提起他,我们想到的就是键值对方式存储(key-value型式),可以接收null键值和null值.基于Map接口的非同步实现(也就是线程不安全),并不保证 ...

  4. java 反射获取属性名和值_阿里P8架构师核心知识点整理:Java基础+spring原理+微服务+算法...

    Java基础 5.1.1. JAVA 异常分类及处理 5.1.1.1. 概念 如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法.在这种情况下 会抛出一个封装了错误信息的对象.此时, ...

  5. Java基础-HashMap集合

    目录 一级目录 二级目录 三级目录 Map接口的常用方法 2.Map集合的遍历 第一种方式:获取所有的key,通过遍历key,来遍历value 3.哈希表数据结构 1.hashMap集合底层是哈希表/ ...

  6. 【Java】HashMap原理及相关面试题

    HashMap与Hashtable两个类都是通过Key-Value对存储的数据结构. 根据官方的说法,二者唯二的区别是HashMap线程不安全而Hashtable线程安全,并且HashMap允许nul ...

  7. Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例

    Java Map Map中不能包含相同的键,每个键只能映射一个值. HashMap:并不能保证它的元素的顺序,元素加入散列映射的顺序并不一定是它们被迭代方法读出的顺序. Map.Entry Map.E ...

  8. Java中HashMap原理

    HashMap的底层是数组+链表,(很多人应该都知道了) JDK1.7的是数组+链表 (1.7只是一个例子,以前的话也是这样后面就以1.7为例子了) 首先是一个数组,然后数组的类型是链表 元素是头插法 ...

  9. Java 基础——HashMap 遍历方式

    目录 1.使用迭代器 (Iterator) EntrySet 的方式进行遍历 2.使用迭代器 (Iterator) KeySet 的方式进行遍历 3.使用 foreach EntrySet 的方式进行 ...

最新文章

  1. p2v、v2v 转换-windows篇
  2. List 如何根据对象的属性去重?Java 8 轻松搞定!
  3. 从头開始写项目Makefile(三):变量的使用
  4. 【git】git 入门使用手册
  5. 2的负x次幂图像_数学| NO.2,3 函数 T15
  6. python学习实例(4)
  7. 数学国里有座天才云集的“疯人院”
  8. Android 自定义ImageView加载图片
  9. franz ubuntu_重新审视Unix理念,持续测试,Franz,Gitbase,Python,Linux等
  10. python种颜色循环_python – 重置Matplotlib中的颜色循环
  11. String类的流程控制
  12. 世界名校、大厂人才汇聚,“马栏山杯”算法大赛打造 AI 视频竞技场
  13. python后台架构Django开发全解
  14. 山西省吕梁市职称计算机考试,山西吕梁考点2012年职称计算机考试时间通知
  15. Atitit form sbmt 表单提交的几种功能方法与实现目录1.1. Atitit 表单提交 mailto协议 http协议 11.2. form-urlencoded mul
  16. hfss仿真软件入门教程
  17. iOS 在CollectionView上做展开收起动画
  18. 实现对手机联系人列表进行读写操作,并用RecyclerView收缩展开方式展现
  19. 用计算机改密码,怎么用电脑改wifi密码 笔记本电脑怎么改wifi密码?-192路由网...
  20. 四川大学c语言实验报告,四川大学-C语言程序设计精品课程申报网站

热门文章

  1. php var export 数组,PHP关于数组缓存JSON、serialize、var_export的说明
  2. ios键盘弹回时顶上去得页面不会回来
  3. NOIP2018 No regrets youth
  4. sublime text 3 3103 注册码
  5. 死锁Demo、线程通信Demo
  6. Maven查看插件信息
  7. vue 组件 props配置
  8. java reader 方法_Java Reader reset()方法
  9. resultmap拿不到数据_英雄联盟S10:半决赛数据告诉你huanfeng有多强
  10. python下载大文件mp4_Python3 使用requests模块显示下载大文件显示进度