HashMap浅析。

[机器学习入门] 李宏毅机器学习笔记-1(Learning Map 课程导览图) 自1956年提出人工智能的概念,其一方面被认为是人类文明未来的发展方向,另一方面也被认为是难以企及的梦想。然而过去几年,随着GPU并行计算性能的强大和海量数据的收集,人工智能取得了爆发性增长。而增长的功臣便是机器学习,特别是机器学习中的深度学习。现在我将系统学习《李宏毅机器学习这门课》,并整理笔记,供学习讨论。 阅读详情

这里是修真院后端小课堂,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【HashMap浅析。】

大家好,我是IT修真院郑州分院第十期的学员,一枚正直纯洁善良的java程序员

今天给大家分享一下,修真院官网java任务十,深度思考中的知识点——HashMap浅析。

背景介绍
Map集合即K-V集合,加上一个hash,这样是散列、无序的。HashMap简单理解就是散列、无序的K-V集合,接下来深入解析一下HashMap。

知识剖析
HashMap的数据结构

数组的优缺点:通过下标索引方便查找,但是在数组中插入或删除一个元素比较困难。

链表的优缺点:由于在链表中查找一个元素需要以遍历链表的方式去查找,而插入,删除快速。因此链表适合快速插入和删除的场景,不利于查找。

HashMap的底层是哈希数组,数组元素为Entry。HashMap通过key的hashCode来计算hash值,当hashCode相同时,通过“拉链法”解决冲突。

HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量 只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要重建该哈希表内部数据结构,从而哈希表将具有大约两倍的桶数。

通常,默认加载因子是 0.75, 这是在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 get 和 put 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少重构操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生重构操作。

常见问题
为什么HashMap的数组长度一定是2的次幂?

扩展思考
Jdk1.7和1.8中hashMap的区别

数据结构引入了红黑树,解决链表过长时增删改查效率过低的问题;

扩容后存储位置的计算不同,jdk1.7在扩容后,key需要按照原来的方法重新计算一次。1.8里,直接原位置或者原位置+扩容量;

插入数据的方法也不同,1.7使用的是头插法,1.8使用尾插法。

参考文献
https://blog.youkuaiyun.com/soga613/article/details/78958642

https://blog.youkuaiyun.com/liyantianmin/article/details/79401854

https://www.cnblogs.com/chengxiao/p/6059914.html

更多讨论
Q1:hashmap 超过默认长度扩容时,是重新创建hashmap(包括定义长度)然后将原来的内容复制过来,然后销毁原来的hashmap?

A1:对,因为数组这种数据结构只能重新申请内存空间,无法直接扩容。

Q2:HashMap什么时候进行扩容?

A2:根据负载因子计算,当前使用的的容量大于负载因子和最大容量的乘积时,进行扩容。

Q3:随着数据量的增加,hashMap的查询时间复杂度?

A3:数组时是O(1),链表时是O(log n),链表长度超过8个变为红黑树,是O(n)。

从零构建生产级K8s-v1.35.0集群:基于Containerd与Cilium的kubeadm实战指南 本文详细介绍了从零构建生产级K8s-v1.35.0集群的全过程,涵盖环境准备、Containerd配置、Kubernetes组件安装、集群初始化及Cilium网络部署等关键步骤。通过实战经验分享系统调优技巧和常见问题解决方案,帮助读者快速搭建稳定高效的Kubernetes集群。 阅读详情

相关推荐

基于STM32的多路火灾报警系统设计

本文设计了一款基于STM32的多路火灾报警系统,利用多个传感器组合(如烟雾传感器、温度传感器等)进行数据采集与处理,精确判断火灾情况,并及时发出报警信号,保障生命与财产安全。本系统设计了一款基于STM32的多路火灾报警系统,通过结合烟雾传感器和温度传感器,提升了火灾检测的准确性和可靠性。未来,系统可以进一步集成更多传感器,如气体传感器、湿度传感器等,进一步提升火灾报警系统的智能化水平。本系统采用STM32F103单片机作为核心处理单元,结合烟雾传感器、温度传感器和报警模块,实现多通道火灾报警功能。

stm32d1219的博客 2030

深度学习系列之 mAP

mAP:mean Averge Precision,作为object detection中衡量检测精度的指标。 在目标检测中,每一类都可以根据recall和precision绘制P-R曲线,AP就是该曲线下的面积。而mAP就是所有类AP的平均值。 Recall:召回率 召回率也叫查全率,是你预测的样本中实际的正样本数 / 所有的正样本数,所以为了提高召回率,可以多预测。 eg:有1...

LeeWanzhi的博客 9744

RT-Thread新手必看:FMT飞控移植中的5个常见坑及解决方案

本文针对RT-Thread新手在移植FMT开源飞控时遇到的5大核心挑战,提供了深度解决方案。内容涵盖SCons构建系统配置、RT-Thread版本API兼容性处理、BSP与设备驱动适配、TOML系统配置解析以及算法模块集成调试,帮助开发者高效避坑,成功完成飞控移植。

gin88的博客 250

Learning Map

//李宏毅视频官网:http://speech.ee.ntu.edu.tw/~tlkagk/courses.html                                                    点击此处返回总目录 //邱锡鹏《神经网络与深度学习》官网:https://nndl.github.io     --------------...

liupc的学习笔记 814

从病毒分析到安全研究:手把手教你用OD破解加壳程序的反调试机制

本文深入探讨了如何识别并绕过加壳程序的反调试机制,特别是针对使用IsDebuggerPresent等API检测的防护手段。通过实战案例和工具链配置,详细介绍了逆向工程中的关键技巧,包括内存补丁、硬件断点定位OEP等,帮助安全研究人员有效突破软件保护技术。

tgb345678的博客 824

FA 新增资产API Demo

DECLARE l_trans_rec fa_api_types.trans_rec_type; l_dist_trans_rec fa_api_types.trans_rec_type; l_asset_hdr_rec fa_api_types.asset_hdr_rec_type; l_asset_desc_rec fa_a

chosen1brain的专栏 2142

hashMap底层源码浅析

hashmap是我们经常使用的一个工具类。那么知道它的一些原理和特性吗? 特性 HashMap是一种基于散列算法实现的快速查找的键值对结构。底层实现是链表数组。 允许空键和空值(但空键只有一个,且放在第一位) 元素是无序的(这里的无序是指的插入和读取的顺序不一致) JDK 8 后又加了底层加上了红黑树优化过长的链表以及并行遍历。 概述 HashMap可以分析的地方很多,网上也有许多文章,本文仅从以下几个方面进行分析: 基础变量 插入(动态扩容,延迟插入,红黑树转换,可以说的地方很多) 并行遍历(jdk

qq_35824590的博客 1万+

Oracle VM VirtualBox虚拟机网络配置与静态IP设置实战

本文详细讲解了Oracle VM VirtualBox虚拟机的网络配置,特别是如何设置静态IP以实现稳定访问。文章对比了NAT、桥接、仅主机等网络模式,并提供了从VirtualBox管理界面到Linux系统内部的完整配置步骤,帮助用户解决IP变动问题,构建可靠的本地开发测试环境。

weixin_28365523的博客 511

hashMap底层源码浅析转载

hashmap是我们经常使用的一个工具类。那么知道它的一些原理和特性吗? 特性 HashMap是一种基于散列算法实现的快速查找的键值对结构。底层实现是链表数组。 允许空键和空值(但空键只有一个,且放在第一位) 元素是无序的(这里的无序是指的插入和读取的顺序不一致) JDK 8 后又加了底层加上了红黑树优化过长的链表以及并行遍历。 概述 HashMap可以分析的地方很多,网上也有许多文章,本文仅从以下几个方面进行分析: 基础变量 插入(动态扩容,延迟插入,红黑树转换,可以说的地方很多) 并行

钟长森的博客 264

lattice Diamond Programmer程序下载

Lattice Diamond Programmer(支持Lattice FPGA与CPLD程序下载)

qq_44385725的博客 5178

腾讯开源SuperSonic:AI+BI如何重塑数据分析?

SuperSonic是腾讯开源的AI+BI平台,融合Chat BI与Headless BI,为制造企业提供实时数据分析。它通过自然语言交互打破数据壁垒,实现生产、库存、质量、供应链等多环节优化,提升决策效率,其开源生态与扩展性助力企业数字化转型与数据价值挖掘。

数据与算法架构提升之路专栏 4541

HashMap 的多方位浅析

HashMap 的多方位浅析 写在前面,本文为笔者学习整理总结,若有不严谨或错误之处,还望不吝指教! 本文内容: 一、 存储结构 1. JDK 1.8 以前 2. JDK 1.8 之后 二、 地址计算、长度总是2的整次幂问题、hash计算、扰动函数 三、 put、putVal 函数 1. JDK 1.8 以前 2. JDK 1.8 之后 四、 re...

大爷没钱 302

UNet改进(12):融合小波变换与注意力机制的图像分割新方法

本文提出了一种改进的WaveletAttentionUNet架构,通过结合小波变换和注意力机制来增强传统UNet的多尺度特征提取能力。该网络使用分组卷积模拟小波分解,将输入通道扩展为4个子带(LL、LH、HL、HH),并通过通道注意力机制自适应加权各子带特征。网络保留了UNet的编码器-解码器结构,在关键位置集成了WaveletAttention模块。实验证明该方法在医学图像分割等任务中能更好地保持边缘细节和复杂纹理特征,同时保持计算效率。

2501_91516851的博客 758

浅析hashmap

hashmap底层,扩容机制,线程安全的替代类

weixin_47056106的博客 1177

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HashMap浅析

1、HashMap简介 HashMap的key、value都允许为空,但是key不允许有重复值、value允许有重复值 HashMap是无序的,是指在遍历HashMap时,得到的元素顺序基本不可能是put元素的顺序。 HashMap不是线程安全的, 2、构造 HashMap是由数组和单向链表构造而成。 DEFAULT_INITIAL_CAPACITY:表示如果不指定初始数组容量大小的话,默认为16。 DEFAULT_LOAD_FACTOR:默认的加载因子,不指定默认为0.75, 加载因子表示h

柒的博客 145

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HashMap浅析?

这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【HashMap浅析?】 大家好,我是IT修真院武汉分院学员,一枚正直善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务10中的深度...

weixin_34050389的博客 85

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

浅析HashMap

HashMap 1、简介 (1)散列桶(数组和链表) (2)非synchronized的,很快 (3)HashMap可以接受null键和值,而Hashtable不能 (4)查找效率主要取决于散列函数、处理冲突的方法和装载因子 2、工作原理 (1)如果无碰撞,放入桶bucket中 (2)如果碰撞了,以链表的方式链接到后面 (3)如果链表长度超过阙值TREEIFY THRESHOLD==8,就把链表装...

Bug君的博客 398
上一篇: shrio框架
下一篇: RMI的简单使用?
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值