当前位置: 首页 > 知识库问答 >
问题:

HashMap。从列表(包含HashMap对象)创建的HashMap上的put()方法修改原始列表对象

狄天逸
2023-03-14

在我的代码中,我有一个ArrayList contentChecklist,其中存储HashMap对象。在列表中添加所有HashMap对象之后,如果我从列表中获取最后一个HashMap对象并将其存储在新的HashMap对象(CheckListMaptemp)中,并使用CheckListMaptemp。放置(“地点”、“某处”) 。它正在修改列表中的原始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);
    }
}

输出为:

我知道这是正确的行为,但我很想知道当我们调用checklistmapptemp时,contentChecklist内容是如何被修改的。放置(“地点”、“某处”) 在CheckListMaptemp上,即使两者都是不同的对象。


共有2个答案

潘弘壮
2023-03-14
Map CheckListMaptemp= (Map)contentChecklist.get(contentChecklist.size()-1);

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

井誉
2023-03-14

这就是收藏的工作原理。无论何时在集合中添加任何对象,集合都只指向同一个对象。它不会创建新对象。

在本例中,您创建了两个HashMap对象checklistmap 1checklistmap 2。当您在ArrayList中添加它时,即contentChecklist,您的ArrayList仅保留两个映射的引用。它不会创建新地图并将其添加到列表中。

所以当你做Map时

因此,如果你要做任何修改,它将反映在同一个对象中。

 类似资料:
  • 问题内容: 我试图创建一个地图列表。在下面的代码中,我期望得到 但是,我只有 如何避免覆盖第一张地图?这是我的代码: 谢谢! ========================= 作为来自过程语言背景(SAS)的Java学习者,我花了很多时间学习和试验ArrayList,LinkedList,Map,LinkedMap等- 我无法使它正常工作。而且我不了解我的有限知识。现在,以下所有答案都很出色!他

  • 当我们将一个对象作为键插入到一个映射中时,它的哈希代码就会生成。但如果我的密钥是对象列表,那么,它是列表中所有对象哈希代码的总和吗? 请帮助理解。

  • 我需要创建一个客户列表,每个客户都有一个工作列表。当将一个列表分配给一个客户机时,它是通过引用传递的,对列表的任何更改(例如清除列表)也会反映在客户机对象中。 我该如何避免这种情况?

  • 我有class-user,它看起来如下所示: 这两个哈希映射包含未知的键和字符串类型的值(它们给我带来了很多麻烦)。 我已经使用insert方法将该类映射到表中。并将其映射到下表方案: 我有什么方法来处理这些hasmaps? 谢谢!

  • 我有以下列表,里面是另一个列表,然后是字符串列表 <代码>列表 示例 除了执行嵌套循环并最终替换列表之外,还有更好的方法吗?也许有溪流?

  • 我已经编写了在android studio上显示可扩展列表视图的代码。以下是ExplandableListView的代码: 这是执行操作的方法: 它在函数定义中的“groupPosition”处显示警告: 当鼠标悬停在上面时,会显示