千家信息网

java数据结构中HashMap是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了java数据结构中HashMap是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。HashMap是什么?HashM
千家信息网最后更新 2026年11月01日java数据结构中HashMap是什么

这篇文章主要介绍了java数据结构中HashMap是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

HashMap是什么?

HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的"容量"(桶的数量)及其大小(键-值映射关系数)成比例。

将上述描述逐一分条,就是下面的内容:

1、HashMap允许null值和null键;

2、此类不保证映射的顺序,也就是HashMap是无序的,但是这个无序可能与很多人的认知是不同的,并不是很多初学者所理解的无序(实际上HashMap在某些时候其实是有序的),后边会详细的讲解;

3、 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。注意,这句话有一点儿很重要,也是一个使用中可能存在的隐患,那就是"此实现假定哈希函数将元素适当地分布在各桶之间",是假定,而不是肯定,说明还有可能不是适当的分布,而实际上不是适当分布的这种情况是存在的,而且有人会通过构造特殊hash值去做hash碰撞攻击(不过一般不用考虑),具体后续会讲。

4、迭代 collection 视图所需的时间与 HashMap 实例的"容量"(桶的数量)及其大小(键-值映射关系数)成比例。这句话给我们一个提示,如果需要较好的迭代性能,就不要将初始容量设置得太高,至于为什么,后续会给出详细分析。

第一条就不用讲了,首先是第二条,为什么HashMap是无序的?为什么此类不能保证映射的顺序?

这个问题要从HashMap的存储结构来讲,HashMap并不会直接使用用户设置的key作为key,而是会使用用户设置的key的hash值作为实际key,这句可能有些拗口,下面我们以put方法为切入点,从源码分析。

public V put(K key, V value)

put方法的源码如下:

可以看到put方法调用了hash方法,然后调用了putVal方法,首先看hash方法的源码:

可以看到,hash方法很简单,判断了一下key是否等于null,如果等于null就返回0,否则就返回后边一串,后边的是一个简单的hash算法,有兴趣的同学可以看些注释为什么采用该hash算法,这里不做过多介绍(该hash算法很重要,建议有一定能力的同学一定要看一下为什么选用该hash算法,尝试去验证一下,然后有兴趣的可以自己写一个hash算法比较一下是否比他这个更优--记住,系统的不一定是最优的,只是在大多数情况下是较好的)。

接下来就是putVal了,putVal的源码如下:

首先是判断当前的table是不是空或者null,如果是的话调用resize方法(该方法是一个很核心的方法,后边会单独介绍)初始化,然后用将初始化后tab的大小赋值给n,然后下一行就用上了,下面看这一行:

对于一些基础不好的同学,可能这一行看起来就不是那么的容易搞懂了,其核心是在:

i = (n - 1) & hash

这一段,为什么这么写呢?因为hash值有可能是比tab的size大的,而如果不处理的话就有可能数组越界了,所以需要将hash值处理为比size小的数,而该操作就能做到,至于为什么可以自行思考,不难(取模运算也能达到这样的效果,但是位操作比较快)。

然后就是判断,如果为null了后续的操作都很好理解,构建一个新的node然后插入table中,如果不为null操作就会稍微复杂些,会在下一节中讲解。

感谢你能够认真阅读完这篇文章,希望小编分享的"java数据结构中HashMap是什么"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

方法 适当 算法 就是 源码 篇文章 顺序 哈希 保证 结构 一行 之间 元素 兴趣 函数 同学 大小 实际 容量 性能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会 互联网科技工作委员会主任 蓝思科技飞鸽互联网 互联网科技行业发展 金融科技 互联网金融 苏州互联网科技贷款公司 深圳艾佳互联网科技 联恩商钥互联网科技有限公司 山东吉时兔互联网科技有限公司 济南和联互联网科技有限公司 上海电发互联网科技有限公司 中国科技互联网公司收入 苏州铭阳互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 上海钢联属于互联网科技股吗 中国互联网有什么科技 21世纪互联网科技成就 易企秀互联网科技是做什么的 悟空问答互联网科技 颐高云石互联网科技 青岛互联网科技公司 杭州互联网科技公司 互联网养老 桔豆科技 互联网科技产品 互联网科技中介 开一家科技互联网公司需要多少钱 青海科技产业互联网发展 东莞新华互联网科技学校 上海万顺科技互联网有限公司招聘 云南互联网科技学费
0