Hashmap详细解析,原理及使用方法分析

hashmap基本原理

  • 根据的hashCode值存储数据。由数组+链表组成的,Entnr数组是HashMap的主体,数组中每个元素是一个单向链表。链表则是1/1解哈希冲突而存在的。在lava8中,使用红黑树优化。当链表长度大于8并且元素个数大于64,转为红黑树。 找长度是logn, log8=3,8/2=4.
  • 链表转红黑树阈值是8—hash碰撞8次的概率很低,8够用了。
  • 红黑树转链表是6–如果在8附近,会发生链表和红黑树相互转化。

构造函数

  • 默认;指定初始容量;指初始容量和负载因子;包含子map的构造函数。

hashmap数据插入原理

  1. 首先判断数组是否为空,为空进行初始化;
  2. 计算k的hashcode值进而得到hash值,计算应该存储的下标index;
  3. 如果tablelindex为空,直接插入:否则判断k是否相等,相等就罗盖value值:(hashCode,eauals)
  4. 否则判断是树形节点,是的话就插入;否则就插入链表中,判断长度是否大于8,大于转化为红黑树。
  5. 插入后,判断节点数是否大于阈值,大于就扩容。

HashMap使用第0个桶存放键为null的键值对。

hashmap初始容量的设置

  • 默认容量16,负载因子0.75.如果自己传入c,容量大小是大于c的2的次方,例如,传入12,容量为16.
  • 具体:把高位为1的后面全变为1,最后再进行+1操作。(让初始二进制右移1,2,4,8,16位,位或,要先减去1,如果cap已经是2的次幂,不减1最后得到的cap是cap的两倍)

在这里插入图片描述

为什么hashmap容量是2的整数次?

  • 这样length-1相当于低位掩码,高位全部为0,只保留低位值(相当于对容量取模操作,位运算更快)

hashmap的hash函数

在这里插入图片描述

  • 先得到K的hashcode0值,32位的int;右移16位,与自己异或。也就是高16和低16位异或。增大低位的随机性,降低hash碰撞(扰动函数)

为什么hashcode之后还要hash?

  • 因为int型散列范围很大,40亿长度数组太大了.

怎么得到下标index?

  • 把散列值h和数组长度length-1做”与“操作。位运算&比%要快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见加解密算法02 - RC4算法分析

RC4是一种广泛使用的流密码,它以其简洁和速度而闻名。区别于块密码,流密码特点在于按位或按字节来进行加密。 RC4由Ron Rivest在1987年设计,尽管它的命名看起来是第四版,实际上它是第一个对外发布的版本。 RC4算法的实施过程简洁…

centos7.8 迁移为 TencentOS Server 2.4(TK4) 报错解决

文章目录 一 问题二 解决三 注意 一 问题 CentOS 官方计划停止维护 CentOS Linux 项目,公司某台腾讯云的centos7.8服务器计划迁移为 TencentOS Server 2.4(TK4) 。在下载rpm包执行迁移命令后报错,场景还原如下。 首先 安装 Python 3 yum install -y p…

什么?免费使用GPT-4o?

⭐简单说两句⭐ ✨ 正在努力的小叮当~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &a…

[Algorithm][多源BFS][矩阵][飞地的数量][地图中的最高点][地图分析] + 多源BFS原理讲解 详细讲解

目录 0.原理讲解1.矩阵1.题目链接2.算法原理详解3.代码实现 2.飞地的数量1.题目链接2.算法原理详解3.代码实现 3.地图中的最高点1.题目链接2.算法原理详解3.代码实现 4.地图分析1.题目链接2.算法原理详解3.代码实现 0.原理讲解 注意:只要是用**BFS解决的最短路径问题…

Apache SeaTunnel在世界级银行巨头JP Morgan 内部的应用实践

作者系 JP Morgan 大数据工程师,文章内容来源于[DET 网络研讨会] 与 Apache SeaTunnel 的数据集成:https://www.youtube.com/watch?vln4mn6vLenc(有兴趣的同学可以观看演讲) 文章介绍了他任职期间使用 Apache SeaTunnel 优化数据…

基础模型的工具学习:综述

23年6月清华、人大、UIUC、纽约大学、北邮和CMU等的论文“Tool Learning with Foundation Models”。 人类拥有创造和利用工具的非凡能力,使他们能够克服物理限制并探索新领域。随着最近强大的基础模型的出现,人工智能系统有可能像人类一样熟练地使用工…

[C/C++] -- 海量数据查重

例如:50亿int整型数,以及一台可用内存为400M的机器,时间复杂度要求O(n),统计只出现一次的数。 需要一种能够在满足 O(n) 时间复杂度要求的同时,使用尽可能少的内存来解决问题。 在处理海量数据时,分治思想…

【Keil备忘录】Keil MDK Warning: L6989W 数学计算函数警告问题

文章目录 1. 发生的场景2. 警告内容3.警告含义4.警告屏蔽解决尝试5. 警告消除解决尝试 1. 发生的场景 stm32L4系列使用数学库时遇到 2. 警告内容 Warning: L6989W: Could not apply patch sdcomp-29491-629360 to instruction VPOP {d8-d13} at offset 0x54, instructio…

浏览器curl请求快速转换为python request 请求

Python 中的 requests 库将浏览器复制的 cURL 命令转换为请求对象。下面是一个示例: import requestscurl_command """curl -X GET \http://example.com/api/data \-H Content-Type: application/json \-H Cookie: udide9ceb2bb9a6bebb401fcddf5c9…

实践指南:如何将 SpringBoot 项目无缝部署到 Tomcat 服务器

序言 SpringBoot 是一个用来简化 Spring 应用初始搭建以及开发过程的框架,我们可以通过内置的 Tomcat 容器来轻松地运行我们的应用。但在生产环境中,我们可能需要将应用部署到独立的 Tomcat 服务器上。本文给大家介绍 SpringBoot 项目部署到独立 Tomcat…

2024速通python之python进阶

文章目录 一、数据容器1.list列表(1)定义(2)常用方法 2.元组(1)定义 3.字符串常用操作汇总(1)根据下标索引取出特定位置字符(2)查找给定字符的第一个匹配项的…

三:哈希map day6 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

今日任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 今日任务 242.有效的字母异位词 题目 大型概括:map 的使用 1.题目描述-->思路: 给出两个string s,t; …

Android Update Engine 分析(二十九)如何进行连续多个版本的升级?

本文为洛奇看世界(guyongqiangx)原创,转载请注明出处。 原文链接:https://blog.csdn.net/guyongqiangx/article/details/138849767 0. 背景 关于如何连续进行多个版本升级,这是一个很常见的需求,也是 OTA 讨论群里试不试就会讨论的一个话题。 例如,昨天一个小伙伴在群里…

a-auto-complete 请求后端数据做模糊查询,解决下拉框选择选不上,不回显的问题

a-auto-complete 请求后端数据做模糊查询,解决下拉框选择选不上,不回显的问题 记录一个a-auto-complete卡bug卡了两天,找不到哪里的问题下拉框选择选不上,不回显,最后终于解决了。 我还对下拉框显示的内容做了小调整。…

MYSQL数据库默认的系统库详解

文章目录 [TOC](文章目录) MYSQL数据库默认的系统库详解1、information_schema(数据库)2、mysql3、performance_schema (性能库)4、sys MYSQL数据库默认的系统库详解 1、information_schema(数据库) 1、记录了用户、表、视图等元数据信息。这个库是虚拟…

越来越真的Deepfake再次引起网安界的关注

当地时间5月6日,全球网络安全领域最受关注的年度盛会 RSAC 2024在美国旧金山隆重开幕。当天,被誉为“安全圈奥斯卡”的创新沙盒大赛也决出了冠军,Reality Defender凭借其创新性的深度伪造(Deepfake)检测平台摘得桂冠&a…

【漏洞复现】泛微OA E-Cology users.data信息泄露漏洞

漏洞描述: 泛微OA E-Cology是一款面向中大型组织的数字化办公产品,它基于全新的设计理念和管理思想,旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology users.data存在敏感信息泄露漏洞,攻击者利用此漏洞可以获取…

Excel 根据包含的关键词将指定列按关键词指定顺序排列

例题描述和简单分析 有 Excel 文件,数据如下所示: AB1Parent ColumnModifier (Column)2Jack lives in the villageRose3As mentioned by jackVillage4Rose already spoke to jack about last nightJack5Rose left the village6rose was their yesterda…

DigitalOcean 应用托管更新:应用端到端运行时性能大幅改进

DigitalOcean 希望可以为企业提供所需的工具和基础设施,以帮助企业客户加速云端的开发,实现业务的指数级增长。为此 DigitalOcean 在 2020 年就推出了App Platform。 App Platform(应用托管) 是一个完全托管的 PaaS 解决方案&…

ubuntu下使用docker安装kafka

1.先安装zookeeper docker run -d --restartalways -e ALLOW_ANONYMOUS_LOGINyes --log-driver json-file --log-opt max-size100m --log-opt max-file2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime bitnami/zookeeper:latest 2.安装kafka docker run…