`
wjboy49
  • 浏览: 285650 次
  • 性别: Icon_minigender_1
  • 来自: 湖南岳阳
社区版块
存档分类
最新评论

HashMap的一个问题

    博客分类:
  • java
 
阅读更多

当你用HashMap<String,Object>把数据保存的时候,其实隐藏了一个隐患。

 

这个隐患就是 当你把HashMap<String,Object>中的Object取出来后,并对该对象修改,你会发现Hashmap<String,Object>中的数据也被修改了。

 

这是为什么呢??

其实我们只要看下源代码就可以很轻松的找出:

132行: transient Entry[] table;用来保存KV对

674行:static class Entry<K,V> implements Map.Entry<K,V> 你们发现Entry居然是一个内部静态类。
现在问题找到了,因为保存到HashMap中的KV对 其实都是静态的。所以当你把HashMap<String,Object>中的Object取出来后,并对该对象修改,你会发现Hashmap<String,Object>中的数据也被修改了。

分享到:
评论

相关推荐

    关于如何解决HashMap线程安全问题的介绍

    在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...

    用HashMap模拟一个网上购物车

    在本实验中,我们通过使用Java语言中的`HashMap`来模拟一个简单的网上购物车系统。该项目的主要目的是熟悉Java集合框架中的`HashMap`类,并了解如何利用它来存储、管理和检索数据。此外,我们还将学习如何使用`...

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    由于HashMap不是线程安全的,一个线程在遍历HashMap的同时,另一个线程对HashMap进行修改(如添加、删除元素),会导致迭代器失效,从而抛出异常。 2. **数据不一致**:由于HashMap的内部实现,如resize操作,可能...

    hashmap面试题_hashmap_

    2. 可空性:键和值都可以为null,但一个HashMap只能有一个键为null的条目。 3. 默认容量:16,负载因子0.75,当容量达到负载因子乘以当前容量时,会发生扩容。 四、HashMap面试题解析 1. HashMap的初始容量和扩容...

    一个基于js的HashMap

    下面我们将详细讨论如何在JavaScript中创建一个基于js的HashMap以及它的相关知识点。 首先,HashMap的核心在于其内部实现的哈希函数,它能将键转换为唯一的哈希码,使得我们可以快速定位到存储的值。在JavaScript中...

    一个delphi的hashmap源代码

    在这个特定的案例中,我们有一个名为"一个delphi的hashmap源代码"的压缩包,其中包含三个不同的哈希表实现:TIntegerHashList、TStringHashList和TObjectHashList。这些类分别针对整数、字符串和对象类型的键进行了...

    用HashMap写的一个小Demo用来写游戏排名的一种方法

    在这个"用HashMap写的一个小Demo用来写游戏排名的一种方法"的示例中,我们很可能会看到如何利用HashMap来组织游戏分数并进行排序,以实现一个简单的游戏排名系统。 HashMap的特点在于它的键(key)是唯一的,每个键...

    ibatis 用HashMap解决resultClass映射

    在日常的软件开发过程中,尤其是在处理数据库查询时,我们经常面临一个问题:如何优雅地处理那些未知或动态变化的列名及列数的情况?在这种情况下,传统的实体类映射方式往往难以满足需求。本文将详细介绍如何利用 ...

    HashMap介绍和使用

    为了解决这个问题,HashMap提供了自动扩容机制。 **3.1 扩容触发条件** 当HashMap中的元素数量超过容量大小与负载因子的乘积时,HashMap会自动扩容。默认负载因子为0.75,这意味着当HashMap的填充率达到75%时,会...

    java HashMap原理分析

    Java HashMap是一种基于哈希表的数据结构,它的存储原理是通过将Key-Value对存储在一个数组中,每个数组元素是一个链表,链表中的每个元素是一个Entry对象,Entry对象包含了Key、Value和指向下一个Entry对象的引用。...

    hashmap实现原理

    默认的`hashCode()`方法返回的是对象的内存地址,而`equals()`仅检查两个对象是否指向同一个实例。如果仅重写`equals()`而不重写`hashCode()`,可能会导致查找效率降低,甚至无法正确获取存储的值。 HashMap的内部...

    HashMap的数据结构

    为了解决这个问题,HashMap使用了链地址法,即在每个数组索引位置上存储一个链表,碰撞的键值对会被链接到同一个索引位置的链表上。 1. **哈希函数**:哈希函数是HashMap的核心,它的目标是将键转换为数组的索引。...

    HashMap的一个数据结构

    HashMap的一个数据结构 锁升级:锁升级过程 resize的过程在开发中 怎么保证容器它线程安全后就是数据插入过程使用的头插法 但是头插法会造成一些问题等等等等的那个等等的那个等等的那个等等的那个等等的那个等等的...

    Hashmap详解

    HashMap 是一种常用的数据结构,在 Java 中,它是一个数组和链表的结合体。下面我们将深入探讨 HashMap 的数据结构、 put 方法的实现细节和 Hash 码的计算过程。 HashMap 的数据结构 HashMap 的数据结构可以分为两...

    HashMap和HashTable的区别和不同

    - **HashMap**: 相较之下,`HashMap`不是一个线程安全的类。如果多个线程并发地访问并修改`HashMap`,则可能导致数据不一致性问题。为了在多线程环境中安全地使用`HashMap`,开发者需要自己负责同步,例如使用`...

    HashMap之resize()方法源码解读.docx

    在resize()方法中,首先需要创建一个新数组,用于存储更多的键值对。该新数组的容量是旧数组容量的两倍。在创建新数组时,HashMap会根据旧数组的容量和扩容阈值来确定新数组的容量和扩容阈值。 三、将旧数组元素...

    HashMap类.rar

    HashMap类在Java编程语言中是集合框架的一部分,它是一个基于哈希表的Map接口实现。HashMap提供了快速的插入、删除和查找操作,平均时间复杂度为O(1)。在这个压缩包“HashMap类.rar”中,包含的是易语言版本的...

    Java HashMap类详解

    Java HashMap 类详解 本资源详细介绍了 Java 中的 HashMap 类...本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点,为大家提供了一个详细的 Java HashMap 类详解。

    Java中HashMap详解(通俗易懂).doc

    Java中的HashMap是一个非常重要的数据结构,它实现了Map接口,提供了键值对的高效存储和访问。HashMap基于哈希表(也称为散列表)原理工作,它允许用户通过键(Key)快速查找对应的值(Value)。在HashMap中,键和值...

    hashmap 集合

    HashMap就是实现Map接口的一个具体类,允许null键和null值,并且提供了快速的插入、删除和查找操作。 HashMap的工作原理基于散列(Hashing)技术。当一个键值对被添加到HashMap中时,键的哈希码(hashCode)被计算...

Global site tag (gtag.js) - Google Analytics