数据结构中的数组和链表被我们所熟知,其有优缺点刚好相反,HashMap综合了两者的特性,是一种寻址容易、插入/删除也容易的数据结构。
HashMap作为java中一种常用的数据结构,工作中会被经常使用,面试中问的也比较多。但一直只了解其特性,其实现原理也只停留在由数组、链接构成,key hash落在数组上,落在数组同一位置的以链表实现,但并没有深入思考,了解其具体实现。今天看到一篇博客,深入浅出的分析了HashMap的实现原理:
引用
下面针对文章中的一些重点,做一些摘要和总结:
1、首先我们要注意到HashMap里面的一个静态内部类Entry,其重要的属性有 key、value、next,从其属性我们看出看出链表的影子
2、文中例子可以很好的理解HashMap的大致实现:第一个键值对A进来,通过计算其key的hash得到的index=0,记做:Entry[0] = A。一会后又进来一个键值对B,通过计算其index也等于0,现在怎么办?HashMap会这样做:B.next = A,Entry[0] = B,如果又进来C,index也等于0,那么C.next = B,Entry[0] = C;这样我们发现index=0的地方其实存取了A,B,C三个键值对,他们通过next这个属性链接在一起。由此可以看出数组中存储的是最后插入的元素。
3、null key总是存放在Entry[]数组的第一个元素
4、确定数组index:hashcode % table.length取模
5、注意table初始大小并不是构造函数中的initialCapacity,而是>= initialCapacity的2的n次幂
6、散列rehash:当哈希表的容量超过默认容量时,必须调整table的大小。当容量已经达到最大可能值时,那么该方法就将容量调整到Integer.MAX_VALUE返回,这时,需要创建一张新表,将原表的映射到新表中。
7、哈希冲突:哈希计算就是努力的把比较大的数据存放到相对较小的空间中,HashMap中使用的是常用的哈希算法取模法。当哈希后落在了相同的位置,此时就产生了哈希冲突,HashMap中使用了链地址法。其它的解放方案还有:开放定址法(线性探测再散列,二次探测再散列,伪随机探测再散列)、再哈希法、建立一个公共溢出区。
分享到:
相关推荐
在深入探讨HashMap的实现原理之前,我们需要了解两个关键的接口方法:`hashCode()`和`equals()`。 根据《Effective JAVA》的建议,当重写`equals()`方法时,也应重写`hashCode()`方法。这是因为在HashMap中,`...
Java HashMap原理分析 Java HashMap是一种基于哈希表的数据结构,它的存储原理是通过将Key-Value对存储在一个数组中,每个数组元素是一个链表,链表中的每个元素是一个Entry对象,Entry对象包含了Key、Value和指向...
### HashMap原理详解 #### 一、HashMap简介与应用场景 HashMap是Java集合框架中一个非常重要的组成部分,它提供了基于键值对(key-value)映射的高效数据存储方式。由于其内部采用了数组加链表(以及红黑树优化)的...
HashMap是Java编程语言中最常用的集合类之一,它属于`java.util`包,提供了一种以键值对形式存储数据的数据结构。HashMap的核心在于其高效的数据查找、...阅读“HashMap原理.pdf”文件,可以获得更深入的细节和示例。
一线大厂BATJ面试题讲解-hashmap原理实现
HashMap底层原理.md
详细介绍了hashMap原理,值得一看,对于面试者有很大帮助
hashMap基本工作原理,图解分析,基础Map集合
要理解HashMap的工作原理,首先需要了解它如何结合数组和链表的特点来提升性能。数组的特点是查找速度快,因为它们在内存中是连续分布的,这使得通过下标访问特定元素的时间复杂度是O(1)。但数组的缺点在于其大小是...
HashMap的底层原理主要依赖于哈希表,这是一种数据结构,它通过计算键的哈希码来实现高效的查找操作。 在HashMap中,每个元素都是一个键值对,存储在一个Entry对象中。当向HashMap添加键值对时,首先会计算键的哈希...
HashMap原理的深入理解 HashMap是基于哈希表的Map接口的非同步实现,提供了所有可选的映射操作,并允许使用null值和null键。HashMap储存的是键值对,HashMap很快。此类不保证映射的顺序,特别是它不保证该顺序恒久...
hashMap基本工作原理,图解分析,基础Map集合
HashMap是Java中非常常见的一种数据结构,主要用于存储键值对,其核心原理是通过哈希算法将键映射到数组中的位置来实现快速访问。本文将详细介绍HashMap的底层原理,包括其内部实现结构、关键字段的作用、以及JDK ...
本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...
hashmap实现原理.pdf
在Java编程语言中,集合框架是开发者日常工作中不可或缺的一部分,HashMap作为其中的重要成员,它的实现原理对于理解Java性能优化和数据结构有深远的意义。HashMap是一个基于哈希表的数据结构,它实现了Map接口,...
HashMap和HashTable底层原理以及常见面试题 HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的...
HashMap 基本原理、内存知识点总结 一、HashMap 基础知识 HashMap 是 Java 中最常用的 Map 实现类,因其查询速度快且可以存储大量数据,故广泛应用于各类 Java 应用程序中。HashMap 的特点是:底层使用哈希表,...
Hashmap底层原理.md