哈希简介

什么是哈希表?

哈希表(hash table)也叫散列表,本质上是个数组,由数组+其它数据结构,形成的一种新的数据结构;那总得有名字吧,就叫做哈希表吧。
跟数组一样,可以通过下标直接获取数据,不过这里不是根据下标了,而是根据key (关键字)。

实现:key通过哈希函数(也叫散列函数)F(key),计算映射成一个值,这个值就是下标,是要存放的数组位置。
这个映射过程称为哈希造表或者散列,这个映射函数F(key)即为哈希函数也叫散列函数,通过哈希函数得到的存储位置称为哈希地址或散列地址,而这个地址就可以存储Entry(key-value)。

Entry:在哈希表中是通过哈希函数将一个值映射到另外一个值的,所以在哈希表中,key映射到value,key就叫做键值,而value呢?就叫做key的哈希值,也就是hash值。

注意阿:本质目的就是根据key获取value,而F( )的目的仅仅是看要存到哪个位置而已!

什么是散列函数?

通过一些特定的方法去得到一个特定的值,就类似一个函数似的,那么这个函数或者是这个方法在哈希表中就叫做散列函数,其中规定的一些操作就叫做函数法则。

例如:查字典,一个字,你可以根据首字母查,可以根据部首查等,而这个字的首字母、部首,就是这个字通过函数法则F( )映射过程形成的首字母、部首。
这个字,就为key。首字母、部首,就为hash值。这个字变成首字母、部首的过程,就为F( )散列函数。

总结:哈希表就是根据key通过一个散列函数加工处理之后得到一个值,这个值就是数据存放的位置,我们就可以根据这个值快速的找到我们想要的数据。

提升

散列算法所计算出来的散列值(Hash Value)具有不可逆(无法逆向演算回原本的数值)的性质。

数组和链表几乎是两个极端,一个查找效率高,一个插入删除效率高,哈希表就是融合两者优点的一种数据结构。在哈希表中进行添加,删除,查找等操作,性能都非常高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1)。

总结:哈希表 = 数组(主干) + 链表(解决冲突)  或者  哈希表 = 数组(主干) +二叉树 或者  哈希表 = 数组(主干) + 链表 +二叉树

什么是哈希冲突?

定义:对于不同的关键字(key),可能得到同一个哈希地址(F(key)),即key1≠key2,而 F(key1)=F(key2),对于这种现象我们称之为哈希冲突,也叫哈希碰撞。

哈希冲突是指哈希函数算出来的地址被别的元素占用了,也就是这个位置有人了。 例子如图

day69 【哈希,HashSet,HashMap】相关推荐

  1. Hash+哈希表+HashMap+HashSet

    Hash+哈希表+HashMap+HashSet 哈希算法,是一类「算法」. 哈希表(Hash Table),是一种「数据结构」. 哈希函数,是支撑哈希表的一类「函数」. Map是映射/地图的意思,在 ...

  2. hashmap是散列表吗_一篇文章教你读懂哈希表-HashMap

    题图Pid=68670770 在最近的学习过程中,发现身边很多朋友对哈希表的原理和应用场景不甚了解,处于会用但不知道什么时候该用的状态,所以我找出了刚学习Java时写的HashMap实现,并以此为基础 ...

  3. [剑指offer]面试题第[50]题[JAVA][第一个只出现一次的字符][哈希表][HashMap]

    [问题描述][简单] 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母.示例:s = "abaccdeff" 返回 "b&quo ...

  4. HashSet/HashMap 存取值的过程

    HashSet与HashMap的关系: (1)HashSet底层用的是HashMap来实现的 (2)这个HashMap的key就是放进HashSet中的对象,value就是一个Object类型的对象 ...

  5. Java当中迭代器的使用(遍历容器ArrayList, HashSet,HashMap)

    一:引言 关于entry 的解释代码有注释,觉得挺重要. 二:上码 package cn.wyj.two;import java.util.*; import java.util.Map.Entry; ...

  6. [Leedcode][JAVA][第136题][第137题][只出现一次的数字][位运算][HashSet][HashMap]

    [问题描述][第136,137题][只出现一次的数字] 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了N次.找出那个只出现了一次的元素.[第136题]N= 2 输入: [2,2 ...

  7. 笔记 09-集合(HashSet HashMap TreeMap) 练习

    题目1 假如你有3个室友,请使用HashSet集合保存3个室友的信息; 信息如下: 赵丽颖,18 范冰冰,20 杨幂,19 要求: 1:室友以对象形式存在,包含姓名和年龄两个属性; 2:使用代码保证集 ...

  8. HashMap, HashSet, HashMap Iterator

    一.遍历HashMap Map<Integer, String> map = new HashMap<Integer, String>();   for(int i=0;i&l ...

  9. java中哈希表HashMap详解遍历操作

    一.主题外谈 在进入主题之前,先讲一点与哈希表相关的一些东西: 1.Hash算法, 通常还可用作快速查找. 2.哈希函数,是支撑哈希表的一类「函数」. 3.哈希表(Hash Table),是一种**「 ...

  10. 【转】HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别

    转自:http://blog.csdn.net/paincupid/article/details/47746341 一.HashMap和TreeMap区别 1.HashMap是基于散列表实现的,时间 ...

最新文章

  1. C++11中std::addressof的使用
  2. 停电后程序员怎么写代码 | 每日趣闻
  3. 超强平衡机器人,走钢丝、玩忍者步伐,还可以做瑜伽动作,不受干扰的那种 | IEEE 2020...
  4. 设计模式之美:Type Object(类型对象)
  5. MyBatis的DAO接口中参数传递建议使用map类型的原因
  6. Linux 文件的复制
  7. 设计模式 工厂方法_使用工厂方法模式设计最佳实践
  8. php mysql 替换 pdo,php操作MySQL数据库之PDO方式
  9. i++为什么不能作为左值,而++i可以作为左值
  10. html 文字如何和阴影齐平,求助!Html Div齐平无效
  11. linux使用中的问题 ---(Cannot find a valid baseurl for repo: base)
  12. 【精讲版】上位机C#/.NET与西门子PLC通信
  13. 免安装版MySQL的配置——详细教程
  14. html图标命名,html 命名规范
  15. 百度地图小区边界爬取
  16. github加速插件(google浏览器)
  17. mininet-ovs转发行为与流表不对应
  18. postman的批量传送数据和接口关联
  19. 曼哈顿距离最小生成树莫队算法
  20. 解决win10更新打印机共享问题

热门文章

  1. pyautogui实现微信自动回复和其他功能
  2. 使用代理后,雷鸟连接qq邮箱
  3. Vue中利用moment.js(时间格式化插件)做一个倒计时组件
  4. 火伞云APP盾,您身边的DDoS攻击安全保护专家
  5. Android成长之路-音乐播放器的实现
  6. 电商商家玩抖音裂变营销,必须要知道的数据分析知识-下秒数据
  7. 关于联想拯救者Y7000/Y7000P电源显示0%的问题及解决办法
  8. 5分钟教你如何设计一个安全web架构
  9. Ford-Fulkerson 最大流求解方法
  10. 分清概念十分重要之--Linux中的各种队列