Hash(哈希)简述 —— Hash函数、Hash值、HashTable、HashMap
总览
- Hash(哈希、散列)
Hash是一种
散列函数或方法
的统称。
·
该方法就是:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。—— (散列方法)
·
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
Hash技术应用于
符号表
,用于构建符号表的结构、属性填入及查找。
·
符号表: 存储用户标识符及其属性信息。
之后将以符号表为例进行解析。
一、Hash函数(哈希函数、散列函数)
假定存在一个有限区域,这个区域要填写一张含N项符号的符号表。通常希望构造一个地址函数(假定函数名为Hash,用于确定符号表中存放符号的地址),对于编译器而言,任何符号(标识符)都有其对应的编号SYM,Hash( SYM ) 则返回一个 0 ~ N-1 间的数,以便将符号能放进符号表的限定空间内。符号表的填表和查表都依赖于 Hash( SYM ) 来获取符号的位置。这里 Hash( SYM ) 被定义为 SYM % N
,即函数返回 SYM / N 的余数
。该值随着SYM的变化,始终在0 ~ N-1 之间变化。可以说随着SYM的变化,Hash函数返回值的集合始终在0 ~ N-1 的区间内散列分布,因此该函数被称为散列函数,英文为Hash函数,Hash函数的返回值被称为Hash值(散列值)。
对Hash函数的要求:
- 函数的计算要简单、高效;
- 函数值能比较均匀地分布在 0 ~ N-1 之间。
构造Hash函数的方法有很多,通常是将符号名的编码散列为 0 ~ N-1 之间的某一个值。由于用户使用标识符是随机的,而且标识符的个数也是无限的,因此,企图构造一 一对应的函数是徒劳的。在这种情况下,除了希望函数值的分布比较均匀外,还应设法解决“地址冲突”的问题。
例如:
N = 17,Hash( SYM ) 为 SYM / N 的余数时,由于Hash( ‘05’ ) = Hash( ‘22’) = 5,此时便存在地址冲突。
符号表将Hash值相同的符号以存储时间的先后顺序,后存储的指向先存储的元素将其链接在一起。
二、Hash值(哈希值、散列值)
由以上Hash函数的介绍可知:
Hash值由Hash函数产生,即为Hash函数的返回值,是待存储于某区间或已存储于某区间的数据的唯一编号经过Hash函数计算之后的值,该值(Hash值)散列在目的存储区间大小的范围之内(如 0 ~ N-1 之间)。
在目的区间与Hash表建立映射关系之后,该区间存储地址便与Hash值建立起了映射关系。注意该映射关系不是一 一对应的关系,因为可能存在不同的数据Hash值相同的情况。
三、HashTable(哈希表)
Hash表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值(SYM)映射到表中一个位置来访问记录,以加快查找的速度。
将所有符号的哈希值对应于一个数组(表)的下标,成为哈希表。该表成为符号表中符号元素的索引表。其Hash值链接到该Hash值对应的符号表中的符号元素。Hash表是一个容量为N的一维数组,它的每个元素初值为null。
对于符号元素的存储和查找,都通过Hash表进行索引,先通过Hash函数计算得到其Hash值,然后在Hash表中找到该Hash值的位置,从Hash值的链接进入符号表,找到元素对应存储位置。
四、HashMap(哈希映射)
HashMap即哈希映射,指的是Hash表中Hash值向符号表元素的映射过程,是一种基于散列算法实现的快速查找的键值对结构。底层实现是链表和数组。即Hash值、Hash表与符号表的映射关系或结构。
Hash技术使用一张一维数组(Hash表)为首的链表通过间接方式来查填符号表。将相同Hash值的符号采用链表的方式连成一串,便于线性查找。符号表则将Hash值相同的符号以存储时间的先后顺序,后存储的指向先存储的元素将其链接在一起。Hash表的Hash值则指向其对应符号表中最后存储的该Hash值的符号。
HashMap数组的每一个元素不止是一个Entry对象,也是一个链表的头节点。每一个Entry对象通过Next指针指向它的下一个Entry节点。当新来的Entry映射到冲突的数组位置时,只需要插入到对应的链表即可:
需要注意的是,新来的Entry节点插入链表时,使用的是“头插法”。至于为什么不插入链表尾部,是因为,后插入的Entry被查找的可能性更大,放到链表头部有利于提高程序性能。
Hash(哈希)简述 —— Hash函数、Hash值、HashTable、HashMap相关推荐
- Hash哈希(hashCode、HashSet 、HashMap)
文章目录 Hash HashMap类 存储 HashMap的长度 Java的hashCode()方法 hashCode() 与 equals() 的关联 情况1(不重写hashCode()和equal ...
- 什么是Hash哈希(散列表)
什么是Hash哈希(散列表) 相信学计算机的各位都绝对听过Hash哈希(散列表),有些人认为Hash是一种算法,有人认为它是一种数据结构,其实这些说法都不算太准确.其实hash是一类算法的集合,或者说 ...
- Hash+哈希+哈希函数
Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数.哈希函数是一个 ...
- java 图片 哈希值_上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中...
上传图片用图片文件的对象hash哈希值判断图片是否一样,避免重复提交相同的图片到服务器中 前端:要用到一个插件,点击下载 企业用户后台管理系统 - 谭人才招聘系统 function ajaxfile( ...
- Hash+哈希表+HashMap+HashSet
Hash+哈希表+HashMap+HashSet 哈希算法,是一类「算法」. 哈希表(Hash Table),是一种「数据结构」. 哈希函数,是支撑哈希表的一类「函数」. Map是映射/地图的意思,在 ...
- K:hash(哈希)碰撞攻击
相关介绍: 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值 ...
- 数据结构分析之线性哈希表(Linear Hash Tables)
在看Hector Garcia-Molina,Jeffrey D.Ullman,Jennifer Widom等人写的<数据库系统实现>的时候, 第14.3节介绍了两种可以动态扩充容量的哈希 ...
- Hash 哈希 PTA 相关题目解析
题解 更多题解请访问 编程题 函数题 以上是我写的浙大PTA 数据结构与算法 固定题目集里面的大部分题解,如果想要PDF版本,请发送邮件 mixinju123@nit.zju.edu.com 7-1 ...
- Hash哈希查找算法
今天面试中遇到一个查找问题,典型的属于哈希查找算法可以解决,我居然懵逼了很尴尬 ̄□ ̄||,之前在数据结构中学过Hash表,后来有没有复习,现在在这里再总结归纳一下吧. 没有复习之前提到Hash我一直以 ...
- Hash(哈希(字符串哈希))模板和做题总结(详细易懂)
文章目录 目录 文章目录 前言: 一 Hash表 1 Hash函数的构造 2 拉链法处理hash冲突模板 3 开放寻址法处理hash冲突 4(例题).雪花雪花 二 字符串Hash O(n)+O(m ...
最新文章
- ASP.NET中如何防范SQL注入式攻击
- 昨天有读者说他不会 docker,今天就给你肝出来了
- php 16进制转换utf-8,php对unicode转utf-8编码
- BZOJ1835: [ZJOI2010]base 基站选址(线段树优化Dp)
- Microsoft SQL Server 全角转半角函数
- 位图引起的内存溢出OutOfMemory解决方案
- 如何去除数据表中的重复数据
- 如何在思科交换机上配置Telnet远程登录
- ORACLE纯SQL实现多行合并一行【转】
- 概率论与数理统计基础
- Linux 脚本安装包
- 最实用的自媒体爆文采集工具,简单易出爆文
- 苹果花期行情结束见顶?铁矿石认沽次末日25倍,纯碱09-01季节性反套?2022.5.10
- 泰迪杯A题通讯产品销售和盈利能力分析一等奖作品
- 基于jsp的博客系统
- 2019 iPad iPhone所有尺寸
- spring boot整合微信支付
- 头条白板面试_我收到的最佳白板面试建议
- 第四单元:丰富的网页媒体
- 一个近乎完美的 Unity 全平台热更方案
热门文章
- 计算机10进制、2进制、8进制、16进制的数字表示
- navicat连接错误
- HTML超级马里奥代码(简单)
- scrapy 保存mysql_scrapy爬虫事件以及数据保存为txt,json,mysql
- 什么是 chatGPT?
- 全景拼接自动校直 matlab,一种自动矫直的图像拼接方法与流程
- java连接informix数据库
- android .rar,手机压缩文档不用愁:RAR for Android
- 数独窟(Sudoku) -- Silverlight
- 【Python】Matplotlib画图(二)——根据函数公式画图