首页 > 编程语言 >hashMap寻址算法

hashMap寻址算法

时间:2024-05-16 23:42:14浏览次数:22  
标签:hash hashMap 索引 算法 寻址 oldCap

hashMap寻址算法

  1. 计算对象的hashCode()。
  2. 再进行调用 hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。
  3. 最后(capacity-1)&hash 得到索引。

为何HashMap的数组长度一定是2的次幂

  1. 计算索引时效率更高:如果是2的n次幂可以使用位与运算代替取模。
  2. 扩容时重新计算索引效率更高:hash&oldCap==0的元素留在原来位置,否则新位置=旧位置+oldCap

标签:hash,hashMap,索引,算法,寻址,oldCap
From: https://www.cnblogs.com/worshipone/p/18196998

相关文章

  • HashMap扩容原理
    在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。每次扩容的时候,都是扩容之前容量的2倍。扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。没有hash冲突的节点,则直......
  • 代码随想录算法训练营第第九天 | 28. 实现 strStr() 、459.重复的子字符串
    实现strStr()因为KMP算法很难,大家别奢求一次就把kmp全理解了,大家刚学KMP一定会有各种各样的疑问,先留着,别期望立刻啃明白,第一遍了解大概思路,二刷的时候,再看KMP会好懂很多。或者说大家可以放弃一刷可以不看KMP,今天来回顾一下之前的算法题目就可以。因为大家算法能力还没到,......
  • HashMap put流程
    判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)。根据键值key计算hash值得到数组索引。判断table[i]==null,条件成立,直接新建节点添加。如果table[i]==null,不成立判断table[i]的首个元素是否和key一样,如果相同直接覆盖value判断table[i]是否为treeNo......
  • HashMap原理
    HashMap的实现原理底层使用hash表数据结构,即数组+(链表|红黑树)。添加数据时,计算key的值确定元素在数组中的下标,key相同则替换,不同则存入链表或红黑树中。获取数据通过key的hash计算数组下标获取元素。HashMap的JDK1.7和JDK1.8有什么区别JDK1.8之前采用的拉链法,数组+链表。J......
  • 共识算法学习路线
    初次接触共识算法领域让我非常头疼,大量晦涩难懂的资料让我无从下手。为了让我的人生更容易些,我决定在这里记录一些在学习过程中搜集到的认为有用的资料。⚠️:这个博客是随时更新的。由于我目前对相关领域认知的匮乏,目前这个博客可能毫无营养。如果你不小心检索到了这个博客,建议......
  • 三种非对称加密算法比较,以及JWT中的对应
    非对称密钥加密算法RSA:RSA是一种非对称加密算法,它需要使用两个密钥:公开密钥(publickey)和私有密钥(privatekey)。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;反之,如果用私有密钥对数据进行加密,则只有用对应的公开密钥才能解密。DSA:DSA(DigitalSignature......
  • 代码随想录算法训练营第八天 | 344.反转字符串 替换数字
    344.反转字符串题目链接文章讲解视频讲解时间复杂度o(n)空间复杂度o(1)思路:双指针解决,和翻转数组一样classSolution{public:voidreverseString(vector<char>&s){intleft=0,right=s.size()-1;while(left<right){......
  • python算法:详细图解: 排序:冒泡排序
    一,什么是冒泡排序?1,冒泡排序和快速排序都属于交换排序所谓交换,就是对序列中两个元素根据键值的比较结果来对换这两个记录在序列中的位置交换排序的特点:将键值较大的元素向序列的尾部移动,键值较小的元素向序列的前部移动2,冒泡排序:BubbleSort,是一种最基础的交换排序,冒泡排......
  • python算法:阿米巴分裂
    一,阿米巴分裂的题目:阿米巴虫用简单分裂的方式繁殖,它每分裂一次要用3分钟,3分钟后会分裂成为2只。将若干个阿米巴放在一个盛满营养液的容器内,45分钟后容器内充满了阿米巴。已知容器最多能够装220只阿米巴。试问,开始的时候往容器内放了多少个阿米巴?二,解析一:分析:已知45......
  • python算法:打字员问题
    一,题目:现有一堆稿件,甲单独打字完成需要6小时,乙单独打字完成需要10小时,甲工作了若干小时后因家中有事由乙接着干,两人完成稿件一共用了7小时,问甲打字用了几个小时?二,解析:1,为了方便计算,我们假设这堆稿件分成60份,可以得到:甲每小时打10份,乙每小时打6份,设甲用时x,取值范围:[......