HashMap 的工作原理

简介: HashMap 的工作原理

HashMap 的底层是通过数组 + 单向链表来实现的,在数组中的每一个元素都是链表结构,链表中的每一个节点又是一个 Entry 对象,这个 Entry 对象是用来存储真正的 Key-Value 键值对。在 HashMap 中有两个比较重要的方法,一个是 put()方法、一个是 get()方法。

先说一下 put()方法:

(1)在存储 key-value 键值对的时候,首先会调用 hash()方法计算出 Key 的 hash 的值,从而得到一个十进制的数字,用这个数字和数组长度减一去取模,可以得到一个结果为数组的下标,

(2)接着我们根据这个下标去找到数组中存储的单向链表,然后把链表中的每一个 key 和要插入的 key 进行一个 equals 的比较,如果相等就直接更新这个 value 值,如果不相等,就把新的 key—value 值添加到链表中,

(3)在添加的过程中,如果链表长度超过了默认值 8 的时候,且 hashap 总元素个数大于 64 的时候,则使用红黑树来代替链表从而提高查询速度,否则当哈希表中存储的键值对超过了数组长度乘以负载因子 0.75 的时候,就会将这个数组扩容为原来的两倍。(红黑树在少于 6 个元素的时候会转变为链表)

其次说一下 get()方法:

(1)在调用 get()方法的时候,get()方法和 put()方法比较类似,同样也会先去调用 hash()方法对 key 进行计算,然后用结果和数组长度减一去取模,然后得到 key 的下标。

(2)接着我们根据这个下标去找到数组中存储的单向链表,然后把链表中的每一个 key 和要查找的 key 进行一个 equals 的比较,如果 key 相同的话就取出返回给用户。

最后再总结一下,HashMap 最核心的原理是利用 Hash 值来计算出下标的位置,然后再用 equals()方法比较,equals()方法比较主要是解决 Hash 冲突的问题,

 

相关文章
|
8月前
|
存储 算法 安全
HashMap底层实现原理
HashMap底层实现原理
101 0
|
4月前
|
存储 算法
HashMap的实现原理
HashMap的实现原理
|
5月前
|
存储 Java 索引
java数据结构,HashMap的工作原理是什么?
java数据结构,HashMap的工作原理是什么?
39 1
|
9月前
|
存储 安全 Java
3分钟轻松理解单线程下的HashMap工作原理
HashMap主要是用来处理键值对数据。随着JDK版本的更新,JDK1.8对HashMap对底层也做了一些优化。今天我带大家一起来结合源码,深入浅出HashMap工作原理。
57 0
|
9月前
|
存储 安全 算法
HashMap深入底层原理解析
这次主要是分析下HashMap的工作原理,为什么我会拿这个东西出来分析,原因很简单,以前我面试的时候,偶尔问起HashMap,99%的程序员都知道HashMap,基本都会用Hashmap,这其中不仅仅包括刚毕业的大学生,也包括已经工作5年,甚至是10年的程序员。HashMap涉及的知识远远不止put和get那么简单。本次的分析希望对于面试的人起码对于面试官的问题有所应付
|
存储
HashMap 的原理
HashMap 的原理
HashMap 的原理
|
存储 算法
【HashMap底层运行原理】
【HashMap底层运行原理】
|
存储 算法 Java
HashMap都在用,原理你真的了解吗?
HashMap虽然日常大家都在用。网上对hashMap原理讲解的博客文章也是数不胜数,想要彻底掌握其底层原理和实现流程;还是得结合jdk源码一步一步跟踪。
HashMap都在用,原理你真的了解吗?
|
存储 索引
30. 说一下HashMap的实现原理?中
30. 说一下HashMap的实现原理?中
67 0
30. 说一下HashMap的实现原理?中
|
索引
30. 说一下HashMap的实现原理?下
30. 说一下HashMap的实现原理?下
79 0