Java的HashMap键值对存储结构解析

Posted chiweiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java的HashMap键值对存储结构解析相关的知识,希望对你有一定的参考价值。

技术图片

容器总体结构

 Map存储键值对的数据结构是“数组+链表”的结构,结合了数组查询数据快和链表增删数据快的优点;用Entry[]存储键值对,Entry为类类型,类里面有四个属性:hash、K、V、next,分别存储哈希值、键对象、值对象、下一个Entry对象引用。

技术图片

Entry底层源码

技术图片

Entry对象存储结构图

技术图片

Entry数组存储结构图

技术图片

HashMap存储数据过程示意图

我们的目的是将”key-value两个对象”成对存放到HashMap的Entry[]数组中。参见以下步骤:

      (1) 获得key对象的hashcode

           首先调用key对象的hashcode()方法,获得hashcode。

      (2) 根据hashcode计算出hash值(要求在[0, 数组长度-1]区间)

           hashcode是一个整数,我们需要将它转化成[0, 数组长度-1]的范围。我们要求转化后的hash值尽量均匀地分布在[0,数组长度-1]这个区间,减少“hash冲突”

以上是关于Java的HashMap键值对存储结构解析的主要内容,如果未能解决你的问题,请参考以下文章

java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。

关于Java编程,你知道吗?(11)HashMap深度解析

HashMap源码解析

第4章 字典

【golang】HashMap原理和实现

Java HashMap原理