每天一个踩坑小妙招!
首先我们来了解一下内存跟hashmap之间的关系
内存
和hashmap
之间的关系是,hashmap使用内存来存储和操作数据。hashmap是一种基于哈希表的数据结构,它通过计算键的哈希值来确定键值对在内存中的存储位置。在内存中,hashmap通常使用数组来存储数据,每个数组元素都是一个桶(bucket),每个桶中可以存储一个或多个键值对。当我们需要在hashmap中查找、插入或删除键值对时,hashmap会根据键的哈希值来定位到相应的桶,并在该桶中进行操作。
因此,hashmap使用内存来存储桶数组和键值对数据,以及一些额外的存储结构用于处理哈希冲突等操作。
为什么要说内存根hashmap之间的关系呢?话不多说,我们直接去踩坑!!!
没错,正如你所想他没错
下面我们来踩坑!!
结果是这样!!!
全变了!!,看到这里你该想想这是为什么呢!!
原因剖析
这说明什么?
我们来debug
事实证明,HashMap中的value在存储list的时候存的确实是一个地址!!!
解决方法很简单
第一种方案:从源头解决问题
只要每次往里塞的时候我们使用新的对象,就会避免这个问题
第二种解决方案:已经用一个了,我们怎么办?
很简单,在上面已经用一个的情况下,我们进行操作的时候,创建一个新的list集合,使用新的集合替换
但是注意,千万不要这样做!!!!!!
这样做等于是吧 list2 跟 list 又变成同一个地址了
结论
HashMap是基于数组来实现Hash表的,数组就像是内存空间,它的每一个index就是一个内存的地址,即数组的下标就好比代表了一个内存地址。
其次HasmMap使用链地址法来解决冲突,每一个Entry<>对象都有一个引用next来指向下一个Entry<>。
希望小伙伴们抓紧自查,看看工作中有没有类似的写法,紧急避险!!!