范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

数据结构与算法基础(十八)哈希表

  摘要
  哈希表 整体结构就是一个数组,元素的结构是 key-value 形式,因为 key 可以是任意可能类型,那么就需要一个标准性的生成唯一索引方式,所以就引出哈希值这个名称。本文在介绍哈希表时,也着重的说明哈希值,了解哈希值的背景以及生成逻辑,才能更好地理解哈希表。
  上期使用 红黑树 实现映射结构,这样的结构满足  Key 必须具备可比性,元素有顺序地分布 这两个特点。在实际的应用场景中,存在结构中的 元素是不需要有序的,并且 Key 也不具备可比较性 ,哈希表完全满足这样的应用场景。
  比如设计一个公司的通讯录,存放所有员工的通讯信息,就可以拿手机号作为 index,员工的名称、职位等作为 value。用哈希表的方式可以将添加、删除和搜索的时间复杂度控制在 O(1)。
  这时创建一个数组,手机号作为 index,然后存放 value。这样能将复杂度控制在 O(1),但是这种 空间换时间 的方式也造成了一些其他问题,比如空间复杂度大(需要更多的空间),空间使用率极其低,非常浪费内存空间。
  哈希表 就是空间换时间的处理方式,但是做了优化,在空间和时间两个纬度中达到适当的平衡。
  哈希表也叫做散列表,整体结构就是一个数组 ,哈希表会将 key 用哈希函数处理之后返回 hash(哈希值),hash 就是哈希表中的 index这样的处理方式就可以满足搜索时间是 O(1),这样的处理方式就可以满足搜索时间是 O(1)。因为哈希表中的 key 可能不具备可比较性,所以要做哈希处理。
  在执行哈希函数之后返回的 hash,可能会出现相同的情况 ,这样的情况就是 哈希冲突 。解决哈希冲突常见的方法有这三种: 开放定址法:按照一定规则向其他地址探测,直到遇见空的位置插入; 再哈希法:设计多个哈希函数,避免出现 hash 相同的情况; 链地址法:比如通过链表将相同 index 的元素串联起来。
  JDK1.8 解决哈希冲突的方式就是使用链地址法,其中的链表就是通过链表+红黑树的组合来实现 。比如当哈希表中的容量大于等于 64,并且单向链表的节点数大于 8 时,转换为红黑树,不满足这个条件时就使用单向链表。
  哈希函数 是生成哈希值的实现方法,哈希函数的实现步骤大致分为两步: 生成 key 的哈希值(哈希值为整数值) key 的哈希值与数组的大小进行相关运算,生成一个索引值 public int hash(Object key) {   return hash_code(key) % table.length; }
  hash_code   是生成哈希值的函数,也可以直接用 JAVA 中的标准函数  hashCode()  。
  这里可以用  &   位运算替换  %   运算,来提高效率。因为  &   位运算是二进制运算,所以在设计数组的时候,需要将数组的长度设计为 2 的幂次方。 public int hash(Object key) {   return hash_code(key) & table.length; }
  一个良好的哈希函数,可以让生成的哈希值分布更加均匀,减少哈希冲突的次数,最终可以提升哈希表的性能。
  Key 的常见类型可能有证书、浮点数、字符串或者自定义对象,不同的类型生成哈希值的方式也会不一样,但是目标是一致的,就是 尽量让每个 Key 的哈希值唯一,尽量让 Key 中的所有信息参与运算 。
  比如在 Java 中, Long   的哈希值实现如下代码: public static int hashCode(long value) {     return (int)(value ^ (value) >>> 32)); }
  这里的  >>>   和  ^   就是将高 32 bit 和低 32 bit 混合计算出 32 bit 的哈希值。
  在计算字符串的哈希值时,可以将字符串拆解成若干个字符,比如 jack,将它拆解成 j、a、c、k(字符的本质就是一个整数,所以 jack 的哈希值可以表示为 j * n3 + a * n2 + c * n1 + k * n0,表达式也可以写成 [(j * n + a) * n + c] * n + k,代码实现如下: String string = "jack"; int hashCode = 0; int len = string.length(); for (int i = 0; i < len; i++) {     char c = string.charAt(i);     hashCode = 31 * hashCode + c; }
  看上面代码时,可以发现,表达式中的  n   使用的是 31 这个数字,那么为什么用 31 呢?
  因为 31 不仅符合 22 - 1 , 而且它还是个奇素数(既是技术,又是素数,还是质数),素数和其他数相乘的结果比其他方式更容易产生唯一性,减少哈希冲突。
  JDK 中,乘数 n 也是用 31,31 也是经过观测分布结果后的选择,关于 31 的变体可以有以下几种:
  31 * i = (25 - 1) * i = i * 25 - i = (i << 5) - i

豪华越享先见先行全新奥迪A7L正式投产55TFSI全系开启预售9月26日,上海全新奥迪A7L正式投产,成为上汽大众累计生产的第2400万辆整车。同时,全新奥迪A7L先行版和全新奥迪A7L55TFSI公布官方零售价,并开启预售全新奥迪A7L先行送绿牌长续航广汽本田皓影锐混动e强电上市超能电驱,SPORT带感!10月18日,本色前行超能生活皓影(BREEZE)锐混动e上市发布会上,皓影(BREEZE)锐混动e释放本色生活魅力强电上市,共推出3个版本,广汽本田商城7天减排超万吨特斯拉十一出行报告带来纯电出行全新视角2021年十一黄金周期间,自驾游已经成为大众最常用的出行方式,多达8成的民众选择驾驶爱车奔赴梦想之地。特斯拉十一出行报告为我们揭示了特斯拉汽车在国庆假期的出游奥秘,描绘出纯电动汽车蔚来ET7打破续航能力天花板EV车型的新标杆要来了吗?2021年前三季度结束,各家车企也是先后公布了销量成绩单,不过从国内整个汽车销售市场来看,新能源汽车的销量涨幅非常明显。19月销售新能源汽车215。7万辆,同比增长1。9倍,占新车让不可能成为可能丰田TNGA架构为何如此强大?回顾百年间的汽车制造生产史,影响汽车产业发展的两大重要事件,一个是福特创造了T型车流水线,还有就是丰田在上世纪开发出来的TPS精益化生产方式,它们都奠定了汽车制造业发展的大方向。经让沟通抬腕可达北京移动推出一号双终端业务迈入5G时代,智能终端设备不断扩展,人们沟通联系的方式也更趋多元化。其中,智能手表凭借着超高的便携性丰富的智能体验超强续航能力等因素异军突起,成为了商务和时尚人士的新宠。为了让智能2021东升杯国际创业大赛与快手达成独家短视频合作7月13日,2021第九届东升杯国际创业大赛宣布与快手达成独家短视频合作。该活动由北京市人力资源和社会保障局北京市科学技术委员会中关村科技园区管理委员会北京市海淀区人民政府中关村科618销冠华硕B560重炮手主板火力全开激烈的2020欧洲杯已经结束了,意大利国家男子足球队夺得冠军,该球队的球迷可谓是彻夜狂欢。但几家欢喜几家愁,其他惜败的球队球迷表示非常的不甘心,如果你也抱着这种心态,那不如在即将发荣耀MagicBook1415锐龙版发布这俩U有点特殊今天,荣耀带来了MagicBook1415的锐龙版,升级最新的锐龙5000U系列,并延续轻薄全金属机身窄边框护眼全面屏品质工艺多屏协同超长续航等一系列设计,面向高校学生年轻白领群体微信状态可以唱歌啦!QQ音乐听歌分享至微信状态功能上线近日,QQ音乐联合微信推出QQ音乐听歌分享至微信状态功能。用户只需在QQ音乐歌曲界面点击分享到微信状态,即可一键跳转设置状态,向好友展示当前音乐心情。现阶段,QQ音乐已经开放千万量高德打车布局全国300多个城市合作网约车平台已超100家高德打车是高德地图旗下的打车服务。2017年,高德打车上线,在国内首创了聚合打车模式。使用高德打车,用户无须再下载安装和注册多个打车软件,可以一键呼叫全网车辆。全平台叫车,打车更快
设计和自拍为本,vivoS10Pro实现自我再进化很多人在选购手机时都会关注手机的性能,尤其是喜欢玩游戏的玩家,对于他们来说,手机性能的好坏,又或者说是否是顶级性能,决定了他们的购机选择。诚然,顶级性能确实能够带来非常不错的游戏体如何在Mac上设置更改或禁用屏幕时间密码?在macOS上,设置新的屏幕时间密码或更改现有的密码是一个非常简单明了的过程。只需按照以下步骤开始。如何在Mac上设置,更改和禁用屏幕时间密码1。从Dock转到Mac上的系统偏好设582亿豪赌的时代美团创始人王兴曾在饭否中讲过这么一个故事他的一个朋友早年间投资了宁德时代,然后有幸去参观了创始人曾毓群的办公室,当他朋友看到墙上挂着赌性更坚强的时候瞬间就被震惊到了,感慨曾总果然是如何看待将于8月17日发布的iQOO8?这个还是挺让人期待的,到时候可以看看手机通过鲁大师的跑分数据来看看它的表现。尴尬的事是,你以为已经插上充电线在充电了,实际上没有插上插头,或者是根本没插上充电线,这事绝对是大部分人国家为什么不强制手机厂商预装国家反诈中心app?如果什么都强制国家未来在哪里?又回到封建社会时代?基本人权都没有满清事件还想再次上演?如果国家强制手机厂商预装反诈中心APP,那手机厂商就少装一个其它的推广APP,就少一份收入!感史无前例,苹果还有iOS14。8!网友搞快点相信很多小伙伴都以为苹果下一个更新版本该是iOS15了,但万万没想到的是,苹果还会有iOS14。8!苹果Xcode开发工具显示,将有iOS14。8版本苹果的秘密,总是在代码里被扒出至暗时刻,细数依图医疗卖身的原因8月11日,毫无预兆下,依图科技下的医疗业务板块已确认并入同业公司人工智能医疗影像诊断系统研发商深睿医疗,整体收购交易已完成,只剩下工商变更步骤,交易价格并未公布。近年来,国务院的耳机收藏篇之颜值与质量兼优的颈挂耳机推荐,颜值控会喜欢的耳机hello身为好物收藏箱的小编,今天要分享的是我日常穿搭用来当饰品的颈挂耳机当然我不可能只买它们来做饰品,我没有那么脑残粉的哈。我在入手前也会做一些相应的功课,在只有颜值和颜质兼优Vivo哪些是最值得买的,有你喜欢的一款吗Vivo哪些是最值得买的,有你喜欢的一款吗?第一款Vivox60Pro加vivoX60Pro搭载了骁龙888,骁龙888使用新一代5nm的工艺制程,并采用134八核心设计,一颗超级8HMilan智能真皮电动床S,解锁更多舒睡模式,开启睡眠新时代前不久新房终于装修好了,接下来就到了挑选电器和家具的环节。之前也有和老婆商量,新房的家具一定要选择好用舒适还延年的,毕竟一套家具价格不菲,基本上安装使用后就很难再去更换了。尤其像床有颜值更有内涵海信TOUCH音乐阅读器七夕情人节为爱牵手一年一度的七夕情人节就要到了,这是牛郎和织女鹊桥相会的日子,也是情侣们彼此表达爱意的好时机。然而,你的七夕情人节礼物准备好了吗?如果还没有准备好也不用慌,海信TOUCH音乐阅读器护