联系hashgameCONTACT hashgame
地址:广东省广州市
手机:13988889999
电话:020-88889999
邮箱:admin@qq.com
查看更多
Rhashgamehashgame
你的位置: 首页 > hashgame

HASH GAME - Online Skill Game ET 300HashMap和HashTable的区别和不同

发布时间:2025-07-27 17:34:28  点击量:

  HASH GAME - Online Skill Game GET 300

HASH GAME - Online Skill Game GET 300HashMap和HashTable的区别和不同

  引言:首先来说一下HashMap内部其实是一个数组链表的结构,当你put一个元素的时候,HashMap会根据Key的hash值算出要存放的数组的位置,如果两个元素算出的数组值相同的话,那么他们会放在数组里的同一个位置,这个时候在获取该元素的时候,那么会根据Key的hash找到数组的位置,然后再从链表中找到该元素。那么我们可以很容易的想象到,如果每一个数组里只有一个元素的时候,效率是最高的,因为不需要再对链表进行操作。有了这点认识我们就可以进行接下来的分析了。

  这里的h & (length-1)是比较出彩的地方,也是为什么前面我们介绍HashMap长度的时候,他总是2的幂数,现在我们知道为什么了吧,它实现了h & (length-1)等价于h % length的操作,求与比求模效率要高,在道格给我的回信中也提到了这一点。也许有人会问了,这里求与的操作中hash的高位没有参与到运算,那么当hash值高位不同时,算出的index却是相同的,那么也就是说增加了在数组中相同位置存放的对象的几率,sun其实考虑到这个问题了,这就是我前面提到的那个hash方法,这也是我向道格发邮件的原因。

  这里HashMap对hash值进行处理,进行了一些列的操作,目的是为了让hash值的高位参与接下来的运算,至于为什么要用到9,14,4,10这几个数,我也不明白,我曾经给JDK的作者之一道格发过邮件咨询这个问题,他没有给我正面的回答,而是建议我看一本书中的hash那一章节,在我查找该问题的时候,发现国外很多人也向道格咨询过此问题,得到的回到好像跟我得到的回答是一样的,嘿嘿。好了,不说题外话了,反正大家知道经过这么操作我们到了一个非负整数。接下来是计算数组下标indexFor

【返回列表页】

顶部

地址:广东省广州市  电话:020-88889999 手机:13988889999
Copyright © 2018-2025 哈希游戏(hash game)官方网站 版权所有 非商用版本 ICP备案编: