为什么HashMap集合的初始大小是16?

【本体】Protege高效批量导入实例(Individuals)的自动化实践 本文详细介绍了在Protege中高效批量导入实例(Individuals)的自动化实践方法。通过分析Protege本体文件结构,提供Python脚本示例,帮助用户快速处理大规模数据导入,显著提升知识图谱构建效率。特别适合需要处理数千个实例的医疗、制药等领域应用。 阅读详情

如果两个元素不相同,但是hash函数的值相同,这两个元素就是一个碰撞

因为把任意长度的字符串变成固定长度的字符串,所以存在一个hash对应多个字符串的情况,所以碰撞必然存在

为了减少hash值的碰撞,需要实现一个尽量均匀分布的hash函数,在HashMap中通过利用key的hashcode值,来进行位运算
公式:index = e.hash & (newCap - 1)

举个例子:
1.计算"book"的hashcode
十进制 : 3029737
二进制 : 101110001110101110 1001

2.HashMap长度是默认的16,length - 1的结果
十进制 : 15
二进制 : 1111

3.把以上两个结果做与运算
101110001110101110 1001 & 1111 = 1001
1001的十进制 : 9,所以 index=9

hash算法最终得到的index结果,取决于hashcode值的最后几位

为了推断HashMap的默认长度为什么是16
现在,我们假设HashMap的长度是10,重复刚才的运算步骤:
hashcode : 101110001110101110 1001
length - 1 : 1001
index : 1001

再换一个hashcode 101110001110101110 1111 试试:
hashcode : 101110001110101110 1111
length - 1 : 1001
index : 1001

从结果可以看出,虽然hashcode变化了,但是运算的结果都是1001,也就是说,当HashMap长度为10的时候,有些index结果的出现几率
会更大而有些index结果永远不会出现(比如0111),这样就不符合hash均匀分布的原则

反观长度16或者其他2的幂,length - 1的值是所有二进制位全为1,这种情况下,index的结果等同于hashcode后几位的值
只要输入的hashcode本身分布均匀,hash算法的结果就是均匀的

所以,HashMap的默认长度为16,是为了降低hash碰撞的几率

UNet 改进(27):结合SCSE注意力机制的UNet网络实现 本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层 阅读详情

相关推荐

睿尔曼超轻量仿人机械臂--PLC控制

PLC通过以太网与机械臂创建socket连接,PLC发送JSON协议控制机械臂进行物料抓取。

weixin_61488836的博客 2465

HashMap的默认初始长度是多少?为什么?

1.HashMap的默认初始长度是16,自动拓展和手动初始化时,长度必须是2的幂,即2^n (每次扩容都是以2的整数次幂扩容 2.原因:选择16是为了服务于从Key映射到index的Hash算法,在性能和内存的使用上取平衡,实现一个尽量均匀分布的Hash函数,选取16,是通过位运算的方法进行求取的。 3.Hash函数:index=Hash(Value) 4.位运算求HashMap函数,位运算:index=Hash数据(Key)&(length-1),进行的是二进制的与(&)运算 例如

qq_49945182的博客 8044

四、SVN客户端tortoiseSVN的基本功能介绍

档案浏览器(Repo-browser) 鼠标右键–>tortoiseSVN->版本库浏览器 输入版本库URL地址,进入如菜单界面 版本库浏览器支持SVN及http两种最常用的通信协议 SVN服务器访问方式 方法 模式 访问方法 File:// 直接版本库访问(本地磁盘) http:// 通过配置subversion的WEB服务器的WEBDAV协议 http...

也许是我送你哦 1012

为什么hashMap默认容量大小是16

长度为16时,可能会出现各种结果出现,因为(Length-1=15) 15的二进制1111,可以出现所有结果,在Length为16的前提下,只要输入的Hash数据本身分布均匀,Hash算法的结果就是均匀的。1.HashMap的默认初始长度是16,自动拓展和手动初始化时,长度必须是2的幂,即2^n ,源码是这样表示的 1

woshibabaaaa的博客 991

MATLAB控制信号发生器(USB-GPIB-HS)GPIB仪器控制教程(含matlab代码)

自动化测试时需要自动产生信号,通过matlab控制信号发生器的频率与功率,以实现自动化信号生成输出

qq_43686057的博客 1607

手眼标定搞定了,手眼矩阵不知道怎么用?快戳!!

手眼标定得到手眼矩阵到底该咋用? 大家好,我是小鱼。上几期给大家分享了关于手眼标定的方法,如果还有不清楚如何让进行手眼标定的同学可以参考下面的文章: 机器人手眼标定都能搞不定?快戳,最好用的手眼标定库!!! 很多同学做完了手眼标定之后得到了手眼矩阵,但是不知道怎么用于程序当中去,还有很多同学搞不清楚各个坐标系之间的关系,今天小智就给大家讲讲手眼矩阵的使用问题。 一、手眼矩阵为什么会长的不一样? 做完手眼标定,得到的手眼矩阵,有可能会长的不一样,这是因为旋转变换是有很多种表示方法的。 1.旋转的表

生活不止眼前的苟且 5344

HashMap的默认长度为什么是16?

如果两个元素不相同,但是hash函数的值相同,这两个元素就是一个碰撞 因为把任意长度的字符串变成固定长度的字符串,所以存在一个hash对应多个字符串的情况,所以碰撞必然存在 为了减少hash值的碰撞,需要实现一个尽量均匀分布的hash函数,在HashMap中通过利用key的hashcode值,来进行位运算 公式:index = e.hash & (newCap - 1) 举个例子: ...

很多时候犯错都是在不知情的情况下发生的 2829

ComfyUI工作流换脸节点报错ReActorFaceSwap

找到自己ComfyUI安装目录的custom_nodes下是否有这个comfyui-reactor-node-main。大家在借鉴别人工作流进行AI换脸的时候,如果遇到ReActorFaceSwap报错提示,莫慌,看我的,两步解决问题。这里千万注意不要嵌套文件夹,保证点击去这个文件就可以看到内置的配置文件!找到自己ComfyUI安装目录的facerestore_models。如果有这个文件,直接跳过,去下一步。如果没有,可以去Git官网下载。

qq_70810809的博客 9018

在创建hashmap时为什么要初始化容量为16呢?

Java 官方文档建议,如果不知道具体的容量大小,可以将初始容量设置为 16,并且尽可能使初始容量为 2 的幂次方数,这样可以更有效地利用 Hash 算法,避免元素分布不均。例如,如果已知数据量为 10000,可以设置初始容量为 16384(即 2 的 14 次幂),这样可以在取余操作中使数据更加均匀地分布在桶中,提高 HashMap 的性能。在创建 HashMap 时,通过指定初始容量可以减少 HashMap 扩容的频率,进而提高 HashMap 的性能。

lics的博客 1165

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 387

基于深度学习的火焰检测系统:YOLOv8 + UI界面 + 数据集详解

YOLO(You Only Look Once)是一种端到端的目标检测算法,其最大优势在于将目标检测任务转化为一个回归问题,可以在一次前向传播中同时完成目标定位和分类。YOLOv8是YOLO系列中的最新版本,相比之前的版本,YOLOv8在精度和推理速度上都做了显著提升,特别是在小物体检测方面表现更加优秀。实时性:YOLOv8具有较高的推理速度,适用于实时火焰检测。高精度:相较于YOLOv7,YOLOv8在精度和小物体检测上有所改进。简单易用:YOLOv8的API简单直观,易于集成和使用。

YOLO 662

HashMap为啥初始化大小是16

HashMap的默认初始化长度是多少? static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 在JDK1.8的 235 行有1<<4就是16,为啥用位运算呢?直接写16不好么?这里主要是位运算的性能好,为啥位运算性能就好,那是因为位运算人家直接操作内存,不需要进行进制转换,要知道计算机可是以二进制的形式做数据存储啊, 这里使用了位运算,为啥不直接16嘞?这里主要是位运算的性能好,为啥位运算性能就好,那是因

Restless Breeze 8160

项目篇:移动平台机械臂视觉定位抓取实施(基于ROS架构)

ROS包内容: 这篇日志的目的是快速项目实施,所以详细的部分会不断补充。 1、相机采集包(创建抓取图像服务,单张) Realsense Camera(微软深度摄像头,官方提供ros包) Pylon Camera(basler相机,官方提供ros包) 2、定位算法包(抓取图像,定位标志物) Aruco_ros (二维码定位,官方提供ros包) Apriltag (二维码定位,官方提供ros包)...

南北粉面馆 6049

new hashmap 初始大小_再有人问你HashMap,把这篇文章甩给他

声明:本文以jdk1.8为主!搞定HashMap作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java==集合中的精髓==了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白白...

weixin_39753791的博客 497

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ArrayList、HashMap等集合初始容量的大小以及扩容的倍数

比较 集合 默认初始化大小 扩容大小 ArrayList 10 1.5 Vector 10 2(默认) HashMap 16 2(阈值0.75) HashTable 11 2倍+1(阈值0.75) ArrayList 无参构造器 由无参方法我们可以得到ArrayList如果不指定数组大小则它开始的大小为0,如果我们指定了初始大小,则elementData 的初始大小就变成了我们所指定的初始大小了 #无参构造方法 public ArrayList() { this.eleme

热爱编程的菜鸟 2237

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Arraylist、LinkedList、Vector、HashMap、HashTable初始大小,扩容因子

Arraylist、LinkedList、Vector、HashMap、HashTable初始大小,扩容因子

pccmy的博客 1080

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

List,Set,Map集合的初始大小,加载因子,扩容倍数以及底层实现

Class 初始大小 加载因子 扩容倍数 底层实现 ArrayList 10 1 1.5倍 Object数组 Vector 10 1 2倍 Object数组 HashSet 16 0.75f 2倍

yanziyu0721730的博客 335

ArryList、Vector、HashMap扩充大小

ArryList ArrayList的默认初始容量为10 可以自定义指定初始容量(构造方法) 扩容: new.size = old.size*1.5 Vector Vector初始大小为10 扩容: new.size = old.size*2 HashMap HashMap初始大小为16 扩容: new.size = old.size*2 通过移位翻倍 else if ((newCap = ol...

jyfjyt的博客 316

StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable是如何扩容的

StringBuffer、StringBuilder默认初始化是16个字符,默认增容为(原长度+1)*2,代码如下:   //默认初始化大小 public StringBuilder() { super(16); } // 默认扩容 int newCapacity = (value.length + 1) * 2;   ArrayList、Ve

maikelsong的专栏 460

【DS】常考面题之如何理解HashMap与HashSet的底层原理

【数据结构】本文介绍了HashMap及HashSet的部分源码,让我们对整个哈希有一个初步理解。

weixin_56952690的博客 193

说说HashMap和HashTable的区别

参考 (4条消息) JAVA面试题:HashMap和Hashtable的区别_岁月求索-优快云博客_hashtable和hashmap 首先 他们都是双列集合,底层都是哈希算法 HashMap是线程不安全 ,可以存null键和null值,但是null键最多一个 Hashtable是线程安全的,不可以存null键和null值 HashMap是继承AbstractMap类 Hashtable是继承Dictionary类 不过它们都实现了同时实现了Map、Cloneable(可复制)、Se

weixin_45665455的博客 171

集合小记

hashmap 初始大小 16 arraylist 扩容1.5倍 vector 2倍 CopyOnWriteArrayList 读写分离 写操作在一个复制的数组上进行,读操作还是在原始数组中进行,读写分离,互不影响。 写操作需要加锁,防止并发写入时导致写入数据丢失。 写操作结束之后需要把原始数组指向新的复制数组。 ...

qq_40694036的博客 138

Java集合中的一些细节

集合 List ArrayList add()方法可以添加null,而且可以添加多个null ArrayList底层结构和源码 ArrayList中维护了一个Object类型的数组elementData。 // transient瞬间的,短暂的 使用transient修饰表示该属性不会被序列化 transient Object[] elementData; 当创建ArrayList对象时,如果使用的是无参构造方法,则初始elementData容量为0,第一次添加数据,则扩容elementDat

万物皆对象 162

HashMap细节及Map实践

结构 从结构实现来说,HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的 下面简述一下hashmap的属性和重要方法put(k,v)和resize(): 属性 默认初始容量为16 默认负载因子为0.75 桶中链表节点转化为红黑树节点的桶元素个数阈值为8 桶中红黑树节点转化为链表节点的桶元素个数阈值为6 链表节点转化为红黑树节点的最小元素个数为64,即如果桶内元素已经达到转化红黑树阈值,但是表元素总数未达到阈值,则值进行扩容,不进行树形化 //默认初始容量为16,容量必须为2的幂

modouwu的博客 392

为什么 Java HashMap 的默认初始容量设置为 16?

容量是 2 的幂:通过位运算高效计算索引,避免慢速的取模操作。容量为 16:在性能和内存之间取得折中,适合大多数中小规模应用场景。装载因子和扩容策略:初始容量配合默认装载因子 0.75,可以在存储 12 个键值对之前避免扩容,进一步提高效率。。

qq_44199605的博客 1050

HashMap初始大小为什么是16 加载因子什么是0.75 扩容倍数为什么是2

加载因子过高,例如为1,虽然减少了空间开销,提高了空间利用率,但同时也增加了查询时间成本; 加载因子过低,例如0.5,虽然可以减少查询时间成本,但是空间利用率很低,同时提高了rehash操作的次数。 在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少rehash操作次数,所以,一般在使用HashMap时建议根据预估值设置初始容量,减少扩容操作。 选择0.75作为默认的加载因子,完全是时间和空间成本上寻求的一种折衷选择,

qq_38418802的博客 1288
上一篇: 链表的初始化以及查找链表中倒数第k个节点的值
下一篇: Spring中BeanFactory和FactoryBean的区别
鹤野云间
博客等级 码龄9年 4粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值