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.hqwc.cn/news/698108.html

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

相关文章

【3dmax笔记】028:倒角的使用方法

一、倒角描述 在3dmax中创建倒角效果可以通过多种方法实现,以下是几种常见的方法: 使用倒角修改器。首先创建一个图形(如矩形和圆),然后对齐它们,将它们转化为可编辑样条线,并附加在一起,选择要倒角的边缘,然后使用倒角修改器来调整高度、轮廓等参数。使用倒角剖面修…

泽攸科技无掩模光刻机:引领微纳制造新纪元

在当今科技迅猛发展的时代,微纳制造技术正变得越来越重要。泽攸科技作为这一领域的先行者,推出了其创新的无掩模光刻机,这一设备在微电子制造、微纳加工、MEMS、LED、生物芯片等多个高科技领域展现出了其独特的价值和广泛的应用前景。 技术革…

aws s3

列出关键点 创建s3 设置s3策略,所有人访问 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", …

未授权访问:Docker未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、通过crontab反弹宿主机shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好…

【Python时序预测系列】灰狼算法(GWO)优化LSTM实现单变量时间序列预测(案例+源码)

这是我的第279篇原创文章。 一、引言 灰狼算法(GWO)是一种新型的优化算法,灵感来源于灰狼群体中的社会行为。在灰狼算法中,每只灰狼都有自己的位置和适应度值,通过模拟灰狼群体的行为来搜索最优解。将灰狼算法应用于优…

Nginx内网环境开启https

文章目录 前言一、open-ssl1. 验证2. 安装3.生成ssl证书 一、nginx1. 验证支持模块2. 安装必要模块2.1 重新编译nginx2.2 替换原文件 3. 配置https 总结 前言 nginx开启https前提: 服务器支持open-sslnginx 包含--with-http_ssl_module --with-stream --with-stre…

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述: 泛微OA E-Cology是一款面向中大型组织的数字化办公产品,它基于全新的设计理念和管理思想,旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞,允许未经授权的用户…

Android手机恢复软件——如何从Android手机内存中恢复已删除或丢失的文件?

大多数 Android 手机的内存上都有数据。通常,我们会在手机上存储大量私人和重要数据,例如联系人,图片,音乐,便笺等。有时我们不小心删除了这些项目,我们需要想办法恢复它。那么,您是否有任何可靠…

【专利】一种日志快速分析方法、设备、存储介质

公开号CN116560938A申请号CN202310311478.5申请日2023.03.28 是我在超音速人工智能科技股份有限公司(833753) 职务作品,第一发明人是董事长夫妇,第二发明人是我。 ** 注意** : 内容比较多,还有流程图、界面等。请到 专利指定页面…

实现 Flask 应用的 HTTPS 加密保护

文章目录 1. 获得免费的 SSL 证书步骤: 2. 配置 Flask 应用3. 测试和部署结论结论 在今天的网络环境中,保护网站和用户数据的安全至关重要。通过在 Flask 应用中启用 HTTPS 加密,您可以确保用户的数据在传输过程中得到保护。本文将介绍如何结…

数字化转型:超越信息化,构建数字化营销体系!

在数字化的浪潮中,企业仅仅做好信息化数字能力基础已远远不够!那么,还需要什么呢?没错,就是在数字化经营思维的指导下,建立起数字化营销体系和执行方案!这是企业在数字时代中立于不败之地的关键…

Linux 第二十九章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…