java - 在 HashMap 中存储多个类型对象并检索它们

标签 java dictionary hashmap

当使用 Object 作为类型时,我很难理解 HashMap。

在这里,我创建了两个对象,一个字符串和一个整数,并为其分配了一个值。然后我将这些对象添加到 HashMap。然后更改字符串和整数对象的值。但是当尝试使用 HashMap.get() 引用它们时,它会显示原始值。

我假设当将值放在 HashMap 上时,会以某种方式在 HashMap 实例中创建一个新的未更改对象,而不是链接底​​层原始对象?

代码如下:

import java.util.HashMap;
import java.util.Map;
public class Test1 {
    //Create objects
    static int integ=1;
    static String strng="Hi";
    //Create HashMap
    static Map<String, Object> objMap = new HashMap(); //Map of shipments
    public static void main(String[] args) {
        //Insert objects in HashMap
        objMap.put("integer", integ);
        objMap.put("string", strng);
        //Check the values
        System.out.println(objMap.get("integer"));
        System.out.println(objMap.get("string"));
        //Change values of underlying object
        integ=2;
        strng="Bye";
        //Check values again
        System.out.println(objMap.get("integer"));
        System.out.println(objMap.get("string"));
    }
}

输出:

debug:
1
Hi
BUILD SUCCESSFUL (total time: 8 seconds)

最佳答案

当你这样做时:

    integ=2;
    strng="Bye";

您只是更改了对对象的引用,而不是对象本身。

对于 IntegerString,您不能按原样更改对象 immutable

因此,如果您想更改 map 中的值,那么解决方案是:

  1. 从 map 中删除之前的值。
  2. 改变值(value)观
  3. 将它们添加到您的 map

关于java - 在 HashMap 中存储多个类型对象并检索它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32886291/

相关文章:

java - 从 ListView 获取选中的元素

java - 使用 ActivityLifecycleCallbacks 自动记录 Android 生命周期事件?

java - Character.getNumericValue() 问题

java - 为什么java在依赖注入(inject)上使用注解

java - 使用 putIfAbsent 重叠 ConcurrentHashMap put

java - HashMap put() 和 get() 方法工作原理的内部结构(仅基本逻辑)

python - 无法正确设置 dict 内的 dict 值

c++ - std::map<int, int> 与 vector of vector

C++解析复杂文件,其中每一行指定一个命令

java - 对 HashMap 键进行排序并存储在 ArrayList 中