首页 > 编程语言 >Hashmap源码什么要对hashcode做一次高16位异或低16位的操作

Hashmap源码什么要对hashcode做一次高16位异或低16位的操作

时间:2024-03-31 13:55:26浏览次数:33  
标签:11 Hashmap 16 二进制 1111 异或 源码 取余

image

翻译一下就是:计算键的hashCode()方法,并将其高几位通过异或操作传播到低位。因为哈希表使用二的幂次方进行掩码操作,那些仅在当前掩码位之上不同的哈希集将会一直发生冲突。(已知的例子包括在小表中保存连续整数的Float键集。)因此,我们应用了一种变换来将高位的影响向下传播。在速度、实用性和位传播的质量之间存在一种权衡。因为许多常见的哈希集已经相当合理地分布(因此不会从传播中受益),并且因为我们使用树来处理大的冲突集合,我们只是以最便宜的方式异或一些移位的位,以减少系统性的损耗,并且还要结合那些由于表界限而永远不会在索引计算中使用的高位的影响。

首先需要知道的是二进制取余操作是怎么一回事:
举个例子,十进制11对4取余11%4 = 2 ....3,商为2,余数为3
11的二进制为1011,对4做除法就是右移2位,结果就是10(即是十进制的2),丢弃11(即十进制的3)
所以取余操作就是拿低位的数,只要和1进行与操作即可,又因为hashmap的容量是2的幂次方进行扩容的,所以长度-1是全部1111这样的二进制。所以公式就变成了value &(length-1);

用上面的例子就是length=4,length-1=3 转成二进制为11,11对4取余即1011&11 =11,答案很快就算出来了

二进制取余这里有个问题就是如果value太大,取余后,就会有很多数字都会有同一个余数,也就是会放到hashmap的同一个桶里,这样会加大冲突。
举个例子
1111110001 & 1111 = 0001,高位发生变化时1011110001 & 1111 = 00011001110001 & 1111 = 0001,也就是说在高位发生变化时,你最后算出来的索引都一样了,高位比特位没用上。
所以为了避免这种情况,HashMap将高16位与低16位进行异或,这样可以保证高位的数据也参与到与运算中来,以增大索引的散列程度。

参考:https://zhuanlan.zhihu.com/p/458305988

标签:11,Hashmap,16,二进制,1111,异或,源码,取余
From: https://www.cnblogs.com/dilumudo/p/18106675

相关文章

  • 织梦地方php分类信息源码带数据库【附下载】
    织梦地方(DedeCMS)是一款基于PHP+MySQL技术的开源内容管理系统(CMS)。它以其强大的功能、灵活的扩展性和友好的用户界面,成为了众多网站建设者的首选。在功能方面,织梦地方CMS提供了丰富的模板标签和灵活的栏目管理,使得用户可以轻松实现各类信息的发布、管理和展示。无论是新闻资讯......
  • 基于java+springboot+vue实现的房屋租赁系统(文末源码+Lw+ppt)23-397
    摘要随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,用户到房源公司进行房屋求租也是比较难实施的。如果开发一款房屋租赁......
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
    摘 要付费自习室管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户信息、自习室准则、自习室、自习计划、留言反馈、订单等功能进行......
  • 基于java+springboot+vue实现的房屋租赁系统(文末源码+Lw+ppt)23-397
    摘要随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,用户到房源公司进行房屋求租也是比较难实施的。如果开发一款房屋租赁......
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
     摘 要付费自习室管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户信息、自习室准则、自习室、自习计划、留言反馈、订单等功能进......
  • 基于java+springboot+vue实现的电商个性化推荐系统(文末源码+Lw+ppt)23-389
    摘 要伴随着我国社会的发展,人民生活质量日益提高。于是对电商个性化推荐进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套电商个性化推荐系统,帮助商家进行商品信息、在线沟通等繁琐又......
  • 基于java+springboot+vue实现的房屋租赁系统(文末源码+Lw+ppt)23-397
    摘要随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,用户到房源公司进行房屋求租也是比较难实施的。如果开发一款房屋租赁......
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
     摘 要付费自习室管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户信息、自习室准则、自习室、自习计划、留言反馈、订单等功能进......
  • java计算机毕业设计(附源码)阳光心理健康网站(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:探索阳光心理,点亮健康人生在快节奏的现代生活中,人们常常面临巨大的心理压力和挑战。阳光心理健康网站应运而生,旨在为广大群众提供一个专业、便捷的心理健康服......
  • java计算机毕业设计(附源码)阳光学院蓝桥杯名师工作室(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:阳光学院蓝桥杯名师工作室的成立,源自于当前信息技术迅猛发展的时代背景和对高素质计算机人才的迫切需求。在全球化和数字化浪潮推动下,编程能力、算法设计......