HashMap内部有一个Entry数组,可以称之为hash table。HashMap的默认构造值为初始容量为16,负载因子为0.75,阀值(初始容量*负载因子)为12。其默认构造子如下:
























































put方法分析:
<1>HashMap首先判断key是否为null,如果为null,
<1.1>HashMap从hash table中第0个位置的Entry,如果该Entry不等于null且entry.key也不为null,当前value覆盖entry的value。
<1.2>否则,在hash table[0]处创建新的key=null的Entry。
<2>
接下来,以key的hashcode做hash运算,获得hash值。该hash值与hash table的长度-1做与操作,获得key在当前hash table中的位置索引。
然后检查在该索引位置是否存在Entry对象,如果存在,且该Entry对象的key的hash值与上面计算的hash值相等,且entry的key与传入的key相等或者key.equals(entry.key),那么以当前的value值覆盖旧值,并返回旧值。
如果hash table中不存在key所指定的Entry,那么就要增加新的Entry。在增加Entry后,要检查容量是否已经达到阀值,如果达到阀值,就以当前hash table的长度的2倍扩展。同时要重新计算entry在新的hash table中的索引位置。注意,由于hash计算可能导致key的hash值可能是重复的,HashMap采用链表的方式解决hash值冲突的问题,另外一种解决方法是开放地址法。
以下是put方法部分代码:
























处理key为空的情况:















计算key的hash值与计算key所应处在hash table中的位置:














增加entry节点以及扩容:







------------------------------------------------
















get方法分析:
当调用get方法时,HashMap首先判断key是否为null,如果为null,其hash值为0,否则通过hash算法计算。
接下来,通过该hash值与hash table的长度-1做与操作,获得key在hash table中的索引。如果entry不等null,且该传入key的hash值与entry的hash值相等,且key==entry.key或者key.equals(entry.key),则返回该entry.value.否则返回null.












相关推荐
在本分析中,我们将会详细探讨HashMap在不同负载因子(loadFactor)、循环次数(loop)、哈希表长度(maptablelen)和映射长度(maplen)等条件下的行为和特性。 负载因子(loadFactor)是HashMap中的一个关键参数...
Java HashMap原理分析 Java HashMap是一种基于哈希表的数据结构,它的存储原理是通过将Key-Value对存储在一个数组中,每个数组元素是一个链表,链表中的每个元素是一个Entry对象,Entry对象包含了Key、Value和指向...
hashMap存储分析hashMap存储分析
### HashMap部分源码分析 #### 一、HashMap数据结构 HashMap是一种非常常用的数据结构,在Java中,它提供了基于键值对存储数据的功能。其内部采用了数组加链表(或红黑树)的形式来存储数据。 - **数组**:提供...
HashMap 是 Java 中最常用的集合类之一,它是基于哈希表实现的,提供了高效的数据存取功能。HashMap 的核心原理是将键(key)通过哈希函数转化为数组索引,然后将键值对(key-value pair)存储在数组的对应位置。...
HashMap死循环原因分析 HashMap是Java中常用的数据结构,但是它在多线程环境下可能会出现死循环的问题,使CPU占用率达到100%。这种情况是如何产生的呢?下面我们将从源码中一步一步地分析这种情况是如何产生的。 ...
哈希映射(HashMap)是Java编程语言中广泛使用的数据结构之一,主要提供键值对的存储和查找功能。HashMap的实现基于哈希表的概念,它通过计算对象的哈希码来快速定位数据,从而实现了O(1)的平均时间复杂度。在深入...
面试中,可能会被问及HashMap的性能优化、内存占用分析、以及在特定场景下的选择,如并发环境、内存敏感的应用等。 总结,HashMap是Java编程中的基础工具,掌握其工作原理和常见面试题,不仅能帮助我们应对面试,更...
面试中,HashMap的源码分析与实现是一个常见的考察点,因为它涉及到数据结构、并发处理和性能优化等多个核心领域。本篇文章将深入探讨HashMap的内部工作原理、关键特性以及其在实际应用中的考量因素。 HashMap基于...
用过Java的都知道,里面有个功能强大的数据结构——HashMap,它能提供键与值的对应访问。不过熟悉JS的朋友也会说,JS里面到处都是hashmap,因为每个对象都提供了map[key]的访问形式。
HashMap导致CPU100% 的分析
hashmap的原理啊思想。
在Java编程语言中,`HashMap`和`HashTable`都是实现键值对存储的数据结构,但它们之间存在一些显著的区别,这些区别主要体现在线程安全性、性能、null值处理以及一些方法特性上。以下是对这两个类的详细分析: 1. ...
通过分析源码,开发者可以深入理解哈希表的工作原理,学习如何在易语言中实现高效的数据结构,这对于提升程序性能和优化内存管理至关重要。同时,这也为自定义数据结构或实现其他哈希表相关的功能提供了基础。
比较分析Vector、ArrayList和hashtable hashmap数据结构
hashMap基本工作原理,图解分析,基础Map集合
1.面试必考之HashMap源码分析与实现 伸缩性角度看HashMap的不足