在我的代码中,我有一个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上,即使两者都是不同的对象。
Map CheckListMaptemp= (Map)contentChecklist.get(contentChecklist.size()-1);
变量CheckListMaptemp
是对包含在位置ContentChecklist.size()-1
的列表中的Map
对象的引用。因此,您使用该引用所做的任何更改都将反映在该Map
对象中。引用不指向另一个Map
对象。
这就是收藏的工作原理。无论何时在集合中添加任何对象,集合都只指向同一个对象。它不会创建新对象。
在本例中,您创建了两个HashMap
对象checklistmap 1
和checklistmap 2
。当您在ArrayList
中添加它时,即contentChecklist
,您的ArrayList
仅保留两个映射的引用。它不会创建新地图并将其添加到列表中。
所以当你做Map时
因此,如果你要做任何修改,它将反映在同一个对象中。
问题内容: 我试图创建一个地图列表。在下面的代码中,我期望得到 但是,我只有 如何避免覆盖第一张地图?这是我的代码: 谢谢! ========================= 作为来自过程语言背景(SAS)的Java学习者,我花了很多时间学习和试验ArrayList,LinkedList,Map,LinkedMap等- 我无法使它正常工作。而且我不了解我的有限知识。现在,以下所有答案都很出色!他
当我们将一个对象作为键插入到一个映射中时,它的哈希代码就会生成。但如果我的密钥是对象列表,那么,它是列表中所有对象哈希代码的总和吗? 请帮助理解。
我需要创建一个客户列表,每个客户都有一个工作列表。当将一个列表分配给一个客户机时,它是通过引用传递的,对列表的任何更改(例如清除列表)也会反映在客户机对象中。 我该如何避免这种情况?
我有class-user,它看起来如下所示: 这两个哈希映射包含未知的键和字符串类型的值(它们给我带来了很多麻烦)。 我已经使用insert方法将该类映射到表中。并将其映射到下表方案: 我有什么方法来处理这些hasmaps? 谢谢!
我有以下列表,里面是另一个列表,然后是字符串列表 <代码>列表 示例 除了执行嵌套循环并最终替换列表之外,还有更好的方法吗?也许有溪流?
我已经编写了在android studio上显示可扩展列表视图的代码。以下是ExplandableListView的代码: 这是执行操作的方法: 它在函数定义中的“groupPosition”处显示警告: 当鼠标悬停在上面时,会显示