HashMap底层数据结构,扩容机制

news/2024/5/3 10:07:29/文章来源:https://blog.csdn.net/weixin_47414034/article/details/128105204

 HashMap的底层结构是数组+链表

没有哈希冲突的元素放在数组里面, 哈希冲突的元素用链表串起来

初始数组长度是16,对应源码:

static final int DEFAULT_INITIAL_CAPACITY=1;

最大的容量为2的30次方,一个很大很大很大的数

还定义了一个负载因子下(加载因子):0.75

static final float DEFAULT_LOAD_FACTOR=0.75;

    

当数组内元素数量超过 “数组容量*加载因子”时,进行扩容 

(1)为什么加载因子为0.75?

加载因子为0.5时,虽然不容易产生碰撞,因此不容易产生链表,所以查询的次数也更少,查询效率高,但是需要频繁进行扩容,空间利用率太低了

装填因子为1的话,会容易产生碰撞,所以很容易产生链表,这样要查询的次数就更多,所以查询的效率很低

因此折中一下,取平均值

(2)为什么扩容后数组的长度时2的n次方?

jdk1.8  hashmap的数据结构就变成数组+链表+红黑树

1.7 数组+链表时,顺着链表一个一个查的时间复杂度为O(n)

1.8,当链表中的元素达到了 8 个时,会将链表转换为红黑树,查找的时间复杂度降为O(logN)

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

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

相关文章

多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂

多个版本JDK切换 多个JDK:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂 提示:看了网上很多教程,5w观看、32w观看、几千观看的,多多少少带点坑,这里我就把踩过的坑都给抹了 文章目录多个…

【数据结构】二叉树的运算

********************************************************************************************************* 本文作者科大MF22某班Noah懒羊羊同学,为大家提供一个作业思路,请勿直接copy!!!一起进步学习~ ******…

极值分析:分块极大值BLOCK-MAXIMA、阈值超额法、广义帕累托分布GPD拟合降雨数据时间序列...

全文链接:http://tecdat.cn/?p25348 你们可能知道,实际极值分析有两种常用方法:分块极大值Block-maxima、阈值超额法threshold excess(点击文末“阅读原文”获取完整代码数据)。今天,我们将分别介绍这两种…

【毕业设计】10-基于单片机的车站安检门_磁性霍尔传感器系统设计(原理图+源码+仿真工程+答辩论文)

【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计(原理图源码仿真工程答辩论文) 文章目录【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计(原理图源码仿真工程答辩论文)任务书设计说明书摘要设计框架…

【数据结构】Java实现数据结构的前置知识,时间复杂度空间复杂度,泛型类的讲解

文章目录数据结构时间复杂度、空间复杂度包装类、装箱与拆箱泛型擦除机制数据结构 当我们在成为一名程序员的这条道路上努力的时候,我们一定经常听到这个词数据结构。那么究竟什么是数据结构呢?数据结构顾名思义,就是数据结构,数…

【深度学习】详解 CLIP

目录 摘要 一、引言和激励性工作 二、方法 2.1 自然语言监督 2.2 创建一个足够大的数据集 2.3 选择一种有效的预训练方法 2.4 选择和放缩一个模型 2.5 训练 三、实验 3.1 零次迁移 3.1.1 激励 Github:GitHub - openai/CLIP: Contrastive Language-Image …

Android 导航之Navigation 组件的介绍与使用

1、介绍: 在以前的应用中,针对多导航模块的使用,常见的有tabhost或者FragmentTabHost,但是这些在使用的过程中,非常臃肿,包括加载和管理也不如人意。在AndroidX中,官方引入Navigation模块&#…

Spring | IOC技术之Bean的配置与实例化

👑 博主简介:    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区:BoBooY(优质编程学习笔记社区) 文章目录Bean的基础配置1、id 与 cla…

Anaconda默认安装在C:\Users\xxx\.conda\envs中

目录 问题: 解决: 更改默认安装位置 移动已安装环境 问题: 解决: 更改默认安装位置 用记事本打开 C:\Users\zqk\.condarc 在最后插入 envs_dirs: - D://anzhuang//Anaconda3//envs 如若需更改pkgs,插入如下代…

OTA: Optimal Transport Assignment for Object Detection 原理与代码解读

paper:OTA: Optimal Transport Assignment for Object Detection code:https://github.com/Megvii-BaseDetection/OTA 背景 标签分配(Label Assignment)是目标检测中重要的一环,经典的标签分配策略采用预定义的规则…

Caffeine 源码、架构、原理(史上最全,10W字 超级长文)

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

【剧前爆米花--爪哇岛寻宝】面向对象的三大特性——封装、继承以及多态的详细剖析(中——多态)。

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java面向对象三大特性——多态的文章,在本篇文章中我会分享多态的一些基础语法以及类在继承时代码的底层逻辑和执行顺序。 目录 多态的定义及实现条件 多态…

【程序人生】4年创作纪念日,不忘初心,继续前行

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

CleanMyMac X2022苹果电脑专业清理Mac加速器软件

CleanMyMac X2023最新免费版苹果电脑专业清理软件,对于Mac电脑用户来说,Cleanmymac X是一款再熟悉不过的电脑清理软件,它是由苹果认证并对外承认的一款第三方清理软件,几乎有95%的Mac用户都会安装并使用,Cleanmymac X究…

从一泡尿的工夫说起

大家好,我是校长。今天聊点不一样的,昨天读书的一点深刻感悟。大家有没有想过这么一个问题:如果没有记录时间的工具被发明,没有时钟,我们现在的生活会怎么样?在那个时钟尚未出现的日子里,如果确…

人工智能-机器学习-深度学习-概述

文章目录一:人工智能需要的基础和涉及内容二:数学基础(1)线性代数(2)概率论(3)数理统计(4)最优化方法(5)信息论三:机器学习…

虹科活动 | SWCF 2022卫星通信与仿真测试线上研讨会倒计时,快来报名吧!

您是否在因线下论坛的地点限制而错失技术干货分享?您是否因时间安排而无法亲临现场与行业专家交流?虹科举办全新线上论坛SWCF,与行业专家一起为您带来最新热点话题讨论与技术干货分享! 什么是SWCF 虹科每年将开展卫星与无线通信…

计算机毕业设计之java+ssm网络硬硬盘系统网站

项目介绍 网盘,又称网络U盘、网络硬盘,是一些网络公司推出的在线存储服务。向用户提供文件的存储、访问、备份、共享等文件管理功能,使用起来十分方便。不花钱的移动硬盘。用户可以把网盘看成一个放在网络上的硬盘或U盘,不管你是…

量子计算(十):量子计算原理

文章目录 量子计算原理 一、酉变换 二、矩阵的指数函数 三、单位矩阵 四、单量子比特逻辑门 五、泡利矩阵 六、常见逻辑门 量子计算原理 经典计算中,最基本的单元是比特,而最基本的控制模式是逻辑门,可以通过逻辑门的组合来达到控制电…

如何做好风险管控,杜绝项目风险突然爆发?

软件开发最怕临近交付期,项目风险突然爆发。那么如何做好风险管理,提前排除隐患? 1、提前规划开发风险的科学管理与控制流程 项目需建立自己的组织级别风险资产库,并在开发过程中,不断地更新和完善。并对项目风险进行科…