HashMap内存地址,一个不小心就会踩坑的小细节

每天一个踩坑小妙招!

首先我们来了解一下内存跟hashmap之间的关系

内存hashmap之间的关系是,hashmap使用内存来存储和操作数据。hashmap是一种基于哈希表的数据结构,它通过计算键的哈希值来确定键值对在内存中的存储位置。在内存中,hashmap通常使用数组来存储数据,每个数组元素都是一个桶(bucket),每个桶中可以存储一个或多个键值对。当我们需要在hashmap中查找、插入或删除键值对时,hashmap会根据键的哈希值来定位到相应的桶,并在该桶中进行操作。
因此,hashmap使用内存来存储桶数组和键值对数据,以及一些额外的存储结构用于处理哈希冲突等操作。

为什么要说内存根hashmap之间的关系呢?话不多说,我们直接去踩坑!!!

在这里插入图片描述
没错,正如你所想他没错
在这里插入图片描述

下面我们来踩坑!!

在这里插入图片描述
结果是这样!!!
在这里插入图片描述
全变了!!,看到这里你该想想这是为什么呢!!

原因剖析

这说明什么?

我们来debug
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
事实证明,HashMap中的value在存储list的时候存的确实是一个地址!!!

解决方法很简单

第一种方案:从源头解决问题

在这里插入图片描述
只要每次往里塞的时候我们使用新的对象,就会避免这个问题

第二种解决方案:已经用一个了,我们怎么办?

在这里插入图片描述
很简单,在上面已经用一个的情况下,我们进行操作的时候,创建一个新的list集合,使用新的集合替换

但是注意,千万不要这样做!!!!!!

在这里插入图片描述
这样做等于是吧 list2 跟 list 又变成同一个地址了

结论

HashMap是基于数组来实现Hash表的,数组就像是内存空间,它的每一个index就是一个内存的地址,即数组的下标就好比代表了一个内存地址。

其次HasmMap使用链地址法来解决冲突,每一个Entry<>对象都有一个引用next来指向下一个Entry<>。

希望小伙伴们抓紧自查,看看工作中有没有类似的写法,紧急避险!!!

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛森年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值