Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从列表(包含HashMap对象)创建的HashMap上的HashMap.put()方法修改原始列表对象_Java_Hashmap - Fatal编程技术网

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

Java 从列表(包含HashMap对象)创建的HashMap上的HashMap.put()方法修改原始列表对象,java,hashmap,Java,Hashmap,在我的代码中,我有一个ArrayListcontentChecklist,其中存储HashMap对象。在列表中添加所有HashMap对象之后,如果我从列表中获取最后一个HashMap对象并将其存储在新的HashMap对象中(CheckListMaptemp),并使用CheckListMaptemp.put(“place”,“somePlace”)。它正在修改列表中的原始HashMap项目 public static void main(String[] args) { List&

在我的代码中,我有一个ArrayListcontentChecklist,其中存储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);
    }
}
publicstaticvoidmain(字符串[]args){
List contentChecklist=new ArrayList();
Map checklIstMap1=新的HashMap();
checklIstMap1.put(“名称”、“名称1”);
checklIstMap1.put(“uuid”,“001”);
contentChecklist.add(checklIstMap1);
Map checklIstMap2=新建HashMap();
checklistmap 2.put(“名称”、“名称2”);
checklistmap 2.put(“uuid”、“002”);
contentChecklist.add(checklistmap 2);
映射CheckListMaptemp=(映射)contentChecklist.get(contentChecklist.size()-1);
CheckListMaptemp.put(“地点”、“某处”);
for(Iterator Iterator=contentChecklist.Iterator();Iterator.hasNext();){
映射对象=(映射)迭代器.next();
String val=(String)object.get(“place”);
系统输出打印项次(val);
}
}
输出为:

无效的 某处
我知道这是正确的行为,但我很想知道当我们调用
CheckListMaptemp.put(“place”,“somePlace”)时,contentChecklist内容是如何被修改的CheckListMaptemp上,即使两者是不同的对象

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


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

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

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

所以当你这么做的时候
Map CheckListMaptemp=(Map)contentChecklist.get(contentChecklist.size()-1)。
它只返回映射对象的引用,不会创建新对象并返回


因此,如果您要进行任何修改,它将反映在同一对象中。

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

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

所以当你这么做的时候
Map CheckListMaptemp=(Map)contentChecklist.get(contentChecklist.size()-1)。
它只返回映射对象的引用,不会创建新对象并返回


因此,如果您要进行任何修改,它将反映在同一对象中。

SideNote:请不要使用rawtypes!看,我添加了泛型,但它在输出上没有任何区别,对吧?不,它不会改变这里的行为。我只是想指出这一点,以防你没有意识到这一点,“即使两者都是不同的对象”。它们不是不同的对象<代码>映射。get
不会生成新对象,它会从映射中为您提供(另一个引用)对象。侧注:请不要使用rawtypes!看,我添加了泛型,但它在输出上没有任何区别,对吧?不,它不会改变这里的行为。我只是想指出这一点,以防你没有意识到这一点,“即使两者都是不同的对象”。它们不是不同的对象<代码>映射。get
不会生成新对象,它会从映射中为您提供(另一个引用)对象。