HashMap提供高效的查找,插入和删除。是怎么做到的?

HashMap的存储结构

HashMap底层是以数组方式进行存储的。将key-value键值对作为数组的一个元素进行存储。

Key-value都是Map.Entry中的属性。其中将key的值进行hash之后进行存储,即每一个key都是计算hash值,然后再存储。每一个hash值对应一个数组下标,数组下标是根据hash值和数组长度计算得来的。

由于不同的key值可能具有相同的hash值,即一个数组的某个位置出现两个相同的元素,对于这种情况,hashmap采用链表的形式进行存储。

hashing(哈希法)的概念

散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。

对比:Hashtable、HashMap、TreeMap

Hashtable 是早期Java类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。

HashMap与 HashTable主要区别在于 HashMap 不是同步的,支持 null 键和值等。通常情况下,HashMap 进行 put 或者 get 操作,可以达到常数时间的性能,所以它是绝大部分利用键值对存取场景的首选。

TreeMap 则是基于红黑树的一种提供顺序访问的 Map,和 HashMap 不同,它的 get、put、remove 之类操作都是 O(log(n))的时间复杂

hashmap 存取原理图_HashMap的存储原理相关推荐

  1. hashmap 存取原理图_HashMap底层实现原理

    HashMap底层原理总结,几个Hash集合之间的对比. HashMap底层存储结构 HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做一个Entry.这些Entry分散存 ...

  2. hashmap储存有向图_HashMap的存储结构及原理

    1.HashMap的数据结构(HashMap通过hashcode对其内容进行高速查找,是无序的) 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 :数组的存储区是连续的,占 ...

  3. java hashmap存取效率_HashMap为什么存取效率那么高?

    1.Hash 也叫散列.哈希. 主要用于信息安全领域中的算法,把长度不同的信息转化为杂乱的128位的编码,找到一种数据内容与地址之间的映射关系. 注意:不同的输入可能会散列成相同的输出 我们最熟悉的O ...

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

    目录 简介 取模具体解决什么问题? 通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间 取模,可保证下标,在HashMap默认创建下标之内 简介 上一篇文章,我们讲到 哈希算法.哈希 ...

  5. hashmap冲突的解决方法以及原理分析

    HashMap冲突问题看这个就行了 在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样.当程序试图将多个 k ...

  6. HBase的数据模型和存储原理

    HBase的数据模型 HBase中表的逻辑结构 Name Space(命名空间) 类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表.HBase有两个自带的命名空间,分别是 hba ...

  7. RAM、ROM、FLASH的存储原理及区别

    一.RAM(Random Access Memory )随机存取存储器,主要作用是存储代码和数据供CPU 需要时调用.这些数据的存储并不像用袋子盛米那般,更像是图书馆中用有格子的书架存放书籍一样,不但 ...

  8. SRAM和DRAM存储原理

    SRAM和DRAM存储原理 一.静态随机存取存储器(SRAM) 1.基本单元结构 2.SRAM结构 二.动态随机存取存储器(DRAM) 1.基本单元结构 2.DRAM结构 三.SRAM和DRAM区别 ...

  9. Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的

    Java基础笔记(2)--HashMap的源码,实现原理,底层结构是怎么样的 HashMap的源码,实现原理,底层结构 1.HashMap: HashMap是基于哈希表的 Map 接口的实现.此实现提 ...

最新文章

  1. vivo 全球商城:商品系统架构设计与实践
  2. python【蓝桥杯vip练习题库】BASIC-6杨辉三角形
  3. python画双折线图-Python Pandas 时间序列双轴折线图
  4. “新SaaS”引爆产业奇点《2017中国SaaS用户研究报告》
  5. 链路分析 K.O “五大经典问题”
  6. 今天整理了短距离传输技术的比较!有用得到的,请拿走不谢!
  7. You C.A.N.大赛 解锁7大行业智能硬件创新密码
  8. 【Spring】SpringMVC 作用域传值的 4 种方式
  9. 中国城市人口分布区域分析
  10. 混合云:公共云和私有云之间取得平衡的方式?
  11. WMRouter:美团外卖Android开源路由框架
  12. 2022年中国全屋智能行业研究白皮书
  13. sqlite3简单操作
  14. java系列:引用类型和基本类型
  15. 面试题:String StringBufere StringBuilder 不用看
  16. java中typeof_深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)...
  17. Python使用random实现双色球、大乐透随机选号
  18. IO前哨站之##File##
  19. acrobat PDF删除部分_PDF文件如何删除部分内容?
  20. oracle的成本核算,ORACLE-EBS-最新成本管理手册

热门文章

  1. java.io.IOException: java.io.FileNotFoundException: C:\Users\26904\AppData 找不到指定的路径,自动跑到C盘里找,太离谱了。
  2. stm8l+sx1278: 1278发送完成中断TxDone处理
  3. 将应用在最近应用中隐藏
  4. matlab单个像素面积,我用MATLAB计算出了图像目标区域的像素点个数,请问知道了目标区域的像素点怎么计算目标区域的面积?...
  5. 2.给 Proxmox VE换源
  6. FET335X核心板 序---用飞凌AM335X开始工作了
  7. python可视化小案例giao
  8. MySQL 6:MySQL存储过程、存储函数
  9. 【KVM相关】kvm虚拟化部署配置
  10. JavaFX鼠标移入后改变样式