java - 从列表(包含 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");
解决方案
Map CheckListMaptemp= (Map)contentChecklist.get(contentChecklist.size()-1);
该变量是对包含在位置列表中CheckListMaptemp
的对象的引用。因此,您使用该引用所做的任何更改都将反映在该对象中。引用不指向另一个对象。Map
contentChecklist.size()-1
Map
Map
推荐阅读
- excel - 无缝链接来自越来越多 Excel 电子表格的时间序列数据
- python - 如何遍历另一个 .py 文件上的列表?
- sql - 将列的每个值除以表中的记录总数
- python-3.x - Python3如何将日期转换为第一个周期是九月的月度周期
- java - 如何在二维数组中创建不同的列大小
- r - 此警告的含义;“警告消息:在 get(object, envir = currentEnv, inherits = TRUE) 中:重新启动中断的承诺评估”
- matlab - 在应用程序设计器中,如何在下拉菜单值之间切换时“保持”我的情节?
- google-chrome - 未向托管用户显示旁加载的 Chrome 扩展程序
- javascript - 在“keydown”功能中排除键
- linux - 在目录的每一级运行脚本