【发布时间】:2019-01-24 12:41:20
【问题描述】:
在我的代码中,我有一个 ArrayList contentChecklist 在其中存储 HashMap 对象。在列表中添加所有 HashMap 对象后,如果我从列表中获取最后一个 HashMap 对象并将其存储在新的 HashMap 对象 (CheckListMaptemp) 中并使用 CheckListMaptemp.put("place", "somePlace"); 。它正在修改 List 中存在的原始 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 上调用 CheckListMaptemp.put("place", "somePlace"); 时如何修改 contentChecklist 内容,即使两者不同对象。
【问题讨论】:
-
旁注:请不要使用 rawtypes!见stackoverflow.com/questions/2770321/…
-
我添加了 Generics ,但它对输出没有任何影响吧?
-
不,它不会改变这里的行为。只是想指出这一点,以防您不知道这一点。
-
“即使两者是不同的对象”。它们是不是不同的对象。
Map.get不会创建新对象,它会为您提供(另一个引用)地图中的对象。