首页 > 解决方案 > 从列表(包含 HashMap Objects )创建的 HashMap 上的 HashMap.put() 方法修改原始列表 Objects

问题描述

在我的代码中,我有一个 ArrayList contentChecklist,其中存储了 HashMap 对象。在列表中添加所有 HashMap 对象后,如果我从列表中获取最后一个 HashMap 对象并将其存储在新的 HashMap 对象(CheckListMaptemp)中并使用 CheckListMaptemp.put("place", "somePlace");. 它正在修改列表中存在的原始 HashMap 对象。

public static void main(String[] args) {    
    List<HashMap> contentChecklist = new ArrayList<>();

    Map<String,String> checklIstMap1= new HashMap<>();
    checklIstMap1.put("name", "name1");
    checklIstMap1.put("uuid", "001");

    contentChecklist.add(checklIstMap1);

    Map<String,String>  checklIstMap2= new HashMap<>();
    checklIstMap2.put("name", "name2");
    checklIstMap2.put("uuid", "002");

    contentChecklist.add(checklIstMap2);

    Map<String,String> CheckListMaptemp= (Map<String, String>) contentChecklist.get(contentChecklist.size()-1);

    CheckListMaptemp.put("place", "somePlace");

    for (Iterator iterator = contentChecklist.iterator(); iterator.hasNext();) {
        Map object = (Map) iterator.next(); 
        String val = (String) object.get("place");
        System.out.println(val);
    }
}

输出是:

空值

某个地方

我知道这是正确的行为,但我很想知道当我们在CheckListMaptemp上调用时contentChecklist 的内容是如何被修改 的,即使两者都是不同的对象。CheckListMaptemp.put("place", "somePlace");

标签: javahashmap

解决方案


Map CheckListMaptemp= (Map)contentChecklist.get(contentChecklist.size()-1);

该变量是对包含在位置列表中CheckListMaptemp的对象的引用。因此,您使用该引用所做的任何更改都将反映在该对象中。引用不指向另一个对象。MapcontentChecklist.size()-1MapMap


推荐阅读