游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

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

  摘要
  哈希表整体结构就是一个数组,元素的结构是keyvalue形式,因为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的哈希值与数组的大小进行相关运算,生成一个索引值publicinthash(Objectkey){returnhashcode(key)table。length;}
  hashcode是生成哈希值的函数,也可以直接用JAVA中的标准函数hashCode()。
  这里可以用位运算替换运算,来提高效率。因为位运算是二进制运算,所以在设计数组的时候,需要将数组的长度设计为2的幂次方。publicinthash(Objectkey){returnhashcode(key)table。length;}
  一个良好的哈希函数,可以让生成的哈希值分布更加均匀,减少哈希冲突的次数,最终可以提升哈希表的性能。
  Key的常见类型可能有证书、浮点数、字符串或者自定义对象,不同的类型生成哈希值的方式也会不一样,但是目标是一致的,就是尽量让每个Key的哈希值唯一,尽量让Key中的所有信息参与运算。
  比如在Java中,Long的哈希值实现如下代码:publicstaticinthashCode(longvalue){return(int)(value(value)32));}
  这里的和就是将高32bit和低32bit混合计算出32bit的哈希值。
  在计算字符串的哈希值时,可以将字符串拆解成若干个字符,比如jack,将它拆解成j、a、c、k(字符的本质就是一个整数,所以jack的哈希值可以表示为jn3an2cn1kn0,表达式也可以写成〔(jna)nc〕nk,代码实现如下:Stringstringjack;inthashCode0;intlenstring。length();for(inti0;ilen;i){charcstring。charAt(i);hashCode31hashCodec;}
  看上面代码时,可以发现,表达式中的n使用的是31这个数字,那么为什么用31呢?
  因为31不仅符合221,而且它还是个奇素数(既是技术,又是素数,还是质数),素数和其他数相乘的结果比其他方式更容易产生唯一性,减少哈希冲突。
  JDK中,乘数n也是用31,31也是经过观测分布结果后的选择,关于31的变体可以有以下几种:
  31i(251)ii25i(i5)i

耳机与杂谈年度求偶大会逛后感先请坦白下:你是不是被封面骗进来的,而且点进来之前还歪头细看了一下?那啥,既然来都来了,听我讲会儿故事吧说从前啊,有个叫女娲的人,她觉得这世界太寂寞了,就仿照自己的……饿了么数据显示十一假期大闸蟹消费热环比增长3倍饿了么数据显示十一假期大闸蟹消费热:环比增长3倍在这个国庆黄金周,全国多地消费者补偿式出游的需求得到了全面释放,长假效应对经济拉动明显。今年黄金周假期的生活消费,较日常和……macOS好用在哪里?macOS好用在哪里?我可以给你分析出几点来,这样你就很直观的看出来好在哪里了!第一点,对于开发者来说,macos上可以使用各种unix工具,等等使得在macos上……缓解腰酸背痛颈椎僵硬奥佳华LINEFRIENDS按摩枕一转眼,2020年已经过去四分之三,翻着剩下的日历心里想着快点过去吧,这倒霉的本命年。上半年疫情严重,很多同事都下沉社区去支援防疫了,我属于留守的,同事在防疫阵线上战斗,我就在……双十一,触想智能智能智控设备好物推荐智能制造如火如荼,各项政策、指导条例、发展规划也屡次提及,日渐成为人们关注的焦点。着力实体经济,给予智能制造,高端制造更多关注是未来一段时间的发展基调。适逢双十一,触想智能奉上……golang2021面向对象(14)Go语言为任意类型添加方Go语言可以对任何类型添加方法,给一种类型添加方法就像给结构体添加方法一样,因为结构体也是一种类型。为基本类型添加方法在Go语言中,使用type关键字可以定义出新的……从砂石产业链视角学习十四五规划一、房地产行业相关思路砂石产业链重要需求端之一是房地产行业,建议稿中提出推动汽车等消费品由购买管理向使用管理转变,促进住房消费健康发展开拓城乡消费市场扩大节假日消费培育国……贫困户农民给国家捐款8个亿,你知道吗如果在你很穷的时候,突然给你8个亿你会怎么做?湖北这个贫困户农民无偿捐给国家。他叫李世益,曾经家里唯一的一栋木头房子要拆迁,拆迁队跑来一看,好家伙整栋房都是金丝楠木,按照市场价……微波烧烤样样通,东芝微烤一体机,在家轻松做叉烧CiaoBella,我是老房。中年人的字典里没有容易二字,披星戴月、忙忙碌碌。自从换了新工作,白天开会跑协调、晚上加班写报告,回到家里老婆孩子早就吃完饭了,只能剩菜回锅,……全新PS动态粒子飞溅插件,轻松玩转炫酷效果我们经常在一些广告或宣传片中看到粒子飞溅科技感爆棚的效果视觉冲击感非常强,让人印象深刻但在ps中制作这种效果并不是容易掌握的技巧同时需要花费你不少时间……9。18亿美元现金!Lumentum收购新飞通当地时间11月4日,Lumentum和NeoPhotonics(新飞通)宣布,双方已经达成一项最终协议,Lumentum将以每股16美元的现金收购新飞通,总股本价值约为9。18……豪华内饰的汉ev现在有不少人已经了解了比亚迪的汉ev,那么我们今天就来说一说汉ev的内饰吧!座椅是采用NAPPA真皮,进口头层牛皮配合龙鳞纹双缝线工艺,只有bba车中才会使用的,车内的木饰板俊……
注解RequestParam与RequestBody的使用场特别说明:该专栏文章均来源自微信公众号《大数据实战演练》,欢迎关注!一、前言一直有这么一个疑问:在使用postman工具测试api接口的时候,如何使用json字符串传值呢……ampquot防水手机ampquot上的孔洞是如何做到防水的玩懂手机网消息链接,今年不用猜,依旧是国产手机厂商的机海战术的一年,仅仅刚进入2019年的4月份,在刚过去的3个月内,国产手机厂商已经推出了多款机型,让消费者比较难办的是,手机……自有住房率只有40德国共享住房租户比房东更像爷李曼2017年和2018年,作者夫妇连续两年到在德国汉堡工作的儿子家探亲,并在附近租住,对在德国租房略有体验,也发现了两个与我国租房市场不同的地方:一是无须中介,房主和租……加速布局元宇宙,Meta打造新款AI超级计算机,瞄准全球第一自脸书去年正式更名元(Meta)后,近来又传出新动作。Meta首席执行官扎克伯格24日表示,为了更好地推进元宇宙的发展,其公司研究团队正在打造一款新的人工智能超级计算机,并有望……农村家里拉网线用交换机好还是路由器好?光纤进入家庭之中以后,首先会连接由运营商提供的光猫。光猫会提供一个或者一个以上的网口。一般来说第1个网口肯定是可以上网的,至于其他网口能不能上网,这取决于运营商。另外各个……手机是如何发明出来的?1973年4月的一天,一名男子站在纽约街头,掏出一个约有两块砖头大的无线电话,并打了一通,引得过路人纷纷驻足侧目,这个人就是手机的发明者马丁库帕。当时,库帕是美国著名的摩托罗拉……美团王兴为什么会妥协,准备花几十亿为员工投保说到美团大家肯定熟悉不能在熟悉,但是在评论美团的时候,群众基本对美团没什么好评,经过互联网的发展,美团已经渗透到我们的生活方方面面。大家对美团也是又爱又恨,爱是因为确实给……手机照片备份用什么办法备份最安全呢?个人感觉备份到电脑最安全,不过电脑内存毕竟是有限的,所以一般会把比较重要的我一般会上传到类似百度云网易亲时光这类拥有云存储技术以及相册功能的软件里,大厂开发的安全肯定有保障,要……麒麟芯片外,华为海思的安防芯片,从70跌至30,联发科成大赢众所周知,因为无法找到代工厂,华为麒麟芯片就成为了绝唱,这对华为手机的影响非常大,所以我们看到华为把荣耀卖了。同时自己的手机销量下持续下滑,今年上半年华为手机销量已经只有……掌趣科技董秘回复公司积极关注元宇宙领域的发展动态并探索相关机掌趣科技(300315)01月12日在投资者关系平台上答复了投资者关心的问题。投资者:1、因全民反对游戏对儿童开放,2、手机游戏因手机电量有限,无法适应元宇宙的沉浸式体验……摩托罗拉G505G手机曝光,新款机型实力有待提高摩托罗拉自从前段时间发布手机后,又有一款代号为塞班(Saipan)的G505G手机曝光了,从曝光图片可以得知该机会采用水滴屏,后置三摄像头模组。据悉该机搭载高通骁龙480……微信QQ元宇宙生态化的可能性微信QQ能实现元宇宙生态吗?有多少人平时只用微信聊天?我的微信从最早的表达自我到后来的如非必要不说一语已经说明了微信的僵化,而微信添加状态与微信农场的动机只有一个:向元宇……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网