java.util.HashMap源码学习(一)

java.util.HashMap:

table数组中存放的是单向链表Entry,Entry中存放的实际数据,一个链表中可能有多个数据,由这些数据的Key可以算出hashCode得到在table中的相同的“桶位”。hashMap能实现快速定位,就是利用了这一特点。不需要对所有数据进行迭代,利用key的hashCode快速找到“桶位”,然后只在桶位中单向链表中的少量数据中进行迭代,所以速度很快。通过由key生成的hash码,可以找到table数组中对应的单向链表Entry,然后在Entry中找到对应的key,从而取出value。

HashMap中重要的字段:

1. DEFAULT_INITIAL_CAPACITY
默认的table数组大小,如果没有通过构造函数指定则table数组的大小使用此值
2. MAXIMUM_CAPACITY
数组table的最大容量
3. DEFAULT_LOAD_FACTOR
默认的装载因子,如果没有指定则使用此值
4. Entry[] table
存放Entry的数组,以hash码作为下标
5. int size
hashMap的大小
6. int threshold
阈值,hashMap存放内容数量的临界点,当存放量大于这个值的时候,就需要将table进行扩张,新建一个两倍大的数组,并将老的元素移过去。threshold = (int)(capacity * loadFactor)
7. float loadFactor
装载因子,实际存放量/capacity容量的比值
8. int modCount
记录hashMap结构变化的次数,使用在hashMap的fail-fast机制中(当某个线程获取map的游标后,另一个线程对map做了结构修改的操作,那么原先准备遍历的线程会抛出ConcurrentModificationException异常)

HashMap的构造函数:

1. HashMap(int initialCapacity, float loadFactor)
使用指定的初始容量,和装载因子构造hashMap。如果initialCapacity<0或loadFactor<=0或loadFactor是非法的浮点类型时抛出IllegalArgumentException异常。当initialCapacity> MAXIMUM_CAPACITY时初始容量等于MAXIMUM_CAPACITY。hashMap的容量必须是2的倍数,所以实际的初始容量会可能会大于initialCapacity。
2. HashMap(int initialCapacity)
使用指定的初始容量,装载因子为DEFAULT_LOAD_FACTOR。
3. HashMap()
初始容量和装载因子均为默认值
4. HashMap(Map<? extends K, ? extends V> m)
从现有的map构造新的hashMap。
角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析 角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析 目前,迭代法和强度传输方程(TIE)法是两类典型的非干涉相位检索技术(Phase Retrieval,被称为相位恢复、相位检索、相位反演法、相位复原等)。迭代法中的经典算法是Gerchberg-Saxton(GS),随后,出现了包括错误减少算法(ER)、混合输入输出法(HIO)、梯度搜索算法、角谱迭代算法等改进算法。... 阅读详情

相关推荐

VSCode 降低适用版本并且关闭自动更新

官方表示,提高了远程服务器构建工具链的最低要求,更新了对 glibc 的要求,需要最低2.28版本。最快的方法是把vs code的版本降到1.85(为什么是这个版本呢?打开VS Code的官方网站(https://code.visualstudio.com/)通过查看可以知道,具体的版本没有直接显示分类,他是根据发布日期来分类的同时和版本匹配。在网站的顶部导航栏中找到”Updates”按钮,点击进入下载页面。找了半天一直没发现,原来就在紧挨着的下面。远程主机不满足运行vs code服务器的先决条件。

Sunflower的博客 9581

java.util.HashMap深度学习

一、散列表初探:       同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。        时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。两者均体现在消耗计算机重要的两个资源方面。     数据结构中有数组和链表

Beyond0525的专栏 6592

Qt开发中彻底解决中文乱码问题

中文乱码问题主要源于编码不一致需要同时设置控制台和Qt应用程序的编码确保项目文件和环境配置的编码一致文件操作时注意指定正确的编码。

qq_53832058的博客 3404

Java.util包源码学习

Java.util包源码学习java.util包接口Collection接口List接口Set接口Queue接口Map接口Iterator接口Clonable接口Serializable接口Java.util包类摘要ArrayList类LinkedList类Vector类HashMap类HashSet类HashTable类TreeMap类Scanner类Timer类TimerTask类 java.util包接口 util包主要提供了集合、日历和随机数的工具包。 集合的两个super接口collection

区小升的博客 1057

多智能体协作的本质是中介者模式,不是多开Agent

多智能体系统并非简单启动多个Agent实例,而是一种受控的、可验证的动态交互过程。其核心原理在于解耦Agent间直接依赖,通过中央中介者统一管理任务分发、协议转换、状态协调与故障兜底。这种架构显著提升系统的可观测性、容错性与可维护性,技术价值体现在强一致性保障(如金融订单原子操作)与灵活自治平衡(如边缘设备轻量协同)。典型应用场景包括电商客服协同、工业巡检调度、飞书/微信多渠道智能服务等。OpenClaw与Hermes Agent正是这一范式的工程落地代表,分别体现强中介与弱中介两种演进路径。

weixin_34151004的博客 358

Qt for WebAssembly环境搭建

一、前言 二、Ubuntu 1、在线安装Qt15 在线安装下载器:https://download.qt.io/official_releases/online_installers/ 安装时记得勾选WebAssembly,如下: 2、安装依赖 # Install Python sudo apt-get install python2.7 # Install CMake (optional, only needed for tests and building Binaryen) sudo apt

贝勒里恩的博客 3668

java.util.HashMap源码分析

一、概述 HashMap是Java中常用的Map实现,它提供了一种键到值的映射,可以高效地查找键值对。HashMap内部是一种基于拉链法实现的哈希表。 HashMap的继承关系图: HashMap不是一个线程安全的类,如果需要并发操作Map应当使用ConcurrentHashMap。 二、Map接口 在了解HashMap前,我们先来回顾一下Map接口 public inte...

APlus 832

Qt实现YOLO目标检测及其界面制作(附完整源码)

Qt实现YOLO目标检测及其界面制作(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2739

java.util.HashMap 类

​ 我们来介绍在 JDK1.8 中 HashMap 的源码实现,这也是最常用的一个集合。但是在介绍 HashMap 之前,我们先介绍什么是 Hash表。 1.哈希表 ​ Hash表也称为散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。也就是说它通过把关键码值映射到表中的一个位置来访问记录,以此来加快查找的速度...

fujiedada的专栏 1212

Livox激光雷达传感器在Python3中的完整驱动程序:深入剖析OpenPyLivox库的实现和应用

当我们提到激光雷达或激光扫描技术时,Livox激光雷达传感器无疑是业界的佼佼者。尽管Livox提供了基于C++的官方软件和API,但现在,有了OpenPyLivox (OPL) 库,Python开发者们也能够轻松地接入和控制这些高级的激光雷达设备。

qq_38334677的博客 1002

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

java.util.HashMap 解析

HashMap 是我们经常使用的一种数据结构。工作中会经常用到,面试也会总提到这个数据结构,找工作的时候,”HashTable 和HashMap的区别“被问到过没有? 本文会从原理,JDK源码,项目使用多个角度来分析HashMap。 1.HashMap是什么 JDK文档中如是说”基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,...

weixin_30457465的博客 806

MATLAB从入门到精通-APP调用simulink中的参数,并且修改,将结果返回到APP中

本次案例为以下微分方程: 其中方程的初始值为: Step1:搭建simulink文件,如下图所示: 初始值配置在积分模块中,如下图所示: Step2:制作app 操作视频: ,时长01:11 代码: 本文包括APP如何回调simulik中d的参数,以及把simulink中的仿真结果输出到APP中的绘图界面中。 核心代码如下: ...

wenyusuran的专栏 3042

jdk源码解析之——java.util源码详解

jdk源码解析之——java.util源码详解 java.util包的util自然指的就是utility(实用),就是说,这个包中定义的class和interface为我们提供了一些实用的工具可以辅助我们的开发。 那么这个包中最主要的以及最重要的就是collection框架,就是我们不管开发什么项目都会用到的”类集”。我们用类集来存放和提取数据,使我们的开发高效有序。 我们不太去赘述用法...

shyknight的博客 807

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java.util——HashMap底层实现原理

Java.util——HashMap底层实现原理 首先介绍一下一般常见的处理哈希冲突的几种方式:开放定址法(发生冲突,继续寻找下一块未被占用的存储地址),再散列函数法,链地址法,而HashMap即是采用了链地址法,也就是数组+链表的方式。 HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。 除了Entry外,HashMap还包括以下几个重要字段: //实际存储的key-value键值对的个数 transient int si

zikai_liang的博客 600

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

细说java.util.HashMap

HashMap是我们最常用的类之一,它实现了hash算法,虽然使用很简单,但是其实现有很多值得研究的地方。 HashMap存储的是key-value形式的键值对,这个键值对在实现中使用一个静态内部类Entry来表示,它存储了key、value、hash值、以及在hash冲突时链表中下一个元素的引用。 HashMap底层实现使用了一个数组来存储元素。它的初始容量默认是16,而且必须容量必须是2的

痴人说梦 9649

java的JDK源码阅读顺序整理笔记

很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。 标题为包名,后面序号为优先级1-4,优先级递减 文章目录 1、java.lang 2、java.util 3、java.util.concurrent 4、java.util.concurrent.atomic 5、java.lang.reflect 6、java.lang.annotation 7、java.util.concurrent.locks

宜春 1952

Java源码解读(一)——HashMap的resize与put

HashMap是java面试必不可少的问题之一,这里只列出了java1.8中比较难读懂的put操作的源码,get操作的源码请自行阅读。 new 申请内存是在第一次的put操作时进行的 resize final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == ...

zero4eva的专栏 798

JDK1.8 源码 java.util.HashMap

本章, 我们来看下java.util.HashMap. 从图中可以看出, 其继承关系为:Collection <-- Map <-- AbstractMap <-- HashMap. 主要成员变量&方法 成员变量 private static final long serialVersionUID = 362498820763181265L; static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

Be yourself. 548

HashMap源码解析

HashMap java.util包下面的工具类,键值对存储数据.通过对键值计算hash值,来存储到对应的位置. jdk1.8中底层使用数组加链表实现.键值对通过一个内部类的Node节点来表示.采用链地址法解决hash冲突,如果一条链上的节点超过给定阈值会变为红黑树.默认为8. 在hashmap中是可以存储空key和value的.如果为空,则位置为0. 声明 hashmap继承了AbstractM...

申老皮的博客 208

Java 1.8-API源码学习之java.util.HashMap

总结: HashMap空参构造,只初始化了负载因子(0.75),其他成员变量均为默认值。 常用的有参构造方法 HashMap(int initialCapacity),是可以设置初始化大小的,在大概知道需要多大的map时,可以考虑使用这个构造方法。 HashMap 扩容:每次扩容至原来的2倍 使用空参构造创建的对象,在第一次添加元素的时候,才会初始化一个长度为16的Node类型的数组。 ...

Never-Say-Never 523

HashMap之java.util.ConcurrentModificationException问题原因及解决办法

Map<Warn,Object> map = new HashMap<>(); for(Entry<Warn,Object> entry : map.entrySet()){ ... ... map.remove(entry.getKey()); ... } 报错:java.util.ConcurrentModificati...

qq_24702263的博客 3452

JAVA JDK源码在线阅读

Java的版本是1.8.0_111,我把JDK源码发布到了github上,大家看起来也比较方便,地址: https://github.com/daiqingliang/java_jdk1.8.0_111 在提供一个rt.jar包源码的地址(JDK源码中用了很多rt.jar中的类,例如sun.misc.Unsafe类,都包含在rt.jar中): https://github.com/daiqi...

qingliang4321的专栏 1万+

如何学习源码

一、程序员的层次划分(本文只针对学习源码部分)  1、只关注项目本身,不懂就baidu一下。   2、除了做好项目,还会阅读和项目有关的技术书籍,看wikipedia。   3、找一些开源项目看看,大量试用第三方框架,还会写写demo。 (要解决什么问题?如何实现的?)   最适合看源码的就是,你对完成一个功能感兴趣,所以你想要了解他。   比如说Mybatis,你想了解他的代码生成机...

weixin_30292745的博客 1264

java.util.hashmap,java.util.HashMap中的无限循环

I have some Vaadin code blocking very often here, and I have no idea what the problem can be:Thread 7892: (state = IN_JAVA)- java.util.HashMap.getEntry(java.lang.Object) @bci=61, line=349 (Compiled fr...

weixin_42196279的博客 294

java.util.HashMap jdk1.8下的源码分析

本文基于jdk1.8 主要以源码视角进行分析,解析代码的实现以及其中可能存在误用的地方. HashMap: 哈希散列表,以key-value键值对形式存在,无序,查找的时间维度与空间维度均为O(1).能够让我们快速对一些数据进行快速的归集. 目录本文基于jdk1.8 主要以源码视角进行分析,解析代码的实现以及其中可能存在误用的地方.1. 类结构,见下图:初始化参数2 部分常用方法解析2.1 初始化...

sky_demo的博客 257

JAVA源码导读

JAVA源码导读 源码阅读顺序,java篇 转载:https://blog.csdn.net/qq_21033663/article/details/79571506 1、java.lang 1) Object 1 wait(), notify(), notifyAll(), wait(timeout), hashCode(), equals(), clone() 2) String 1 ch...

backstreetBoy1的博客 369
下一篇: java.util.HashMap源码学习(二)
windcpp
博客等级 码龄19年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值