Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 .putAll()是否影响复制的变量?_Java_Android_Hashmap - Fatal编程技术网

Java .putAll()是否影响复制的变量?

Java .putAll()是否影响复制的变量?,java,android,hashmap,Java,Android,Hashmap,我完全不知所措。这是我的密码 HashMap>>themap=newhashmap>>(); HashMap>outerMap=newhashmap>() EDIT2:我已经更新了复制方法,使其足够深入这是第一个输出: 1{compu={Day1={Work hours=0,Study hours=0,Day grades=-1,sheet filled=0,Fun=0},Day2={Work hours=0,Study hours=0,Day3={Work hours=0,Study hour

我完全不知所措。这是我的密码

HashMap>>themap=newhashmap>>(); HashMap>outerMap=newhashmap>()

EDIT2:我已经更新了复制方法,使其足够深入
这是第一个输出:
1{compu={Day1={Work hours=0,Study hours=0,Day grades=-1,sheet filled=0,Fun=0},Day2={Work hours=0,Study hours=0,Day3={Work hours=0,Study hours=0,Day grades=-1,sheet filled=0,Fun=0,Day2={Day1={Work hours=0,Study grades hours=0,Day3=-1,sheet filled=0,Fun=0,Day2}={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},第三天={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},数学={Day1={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},第二天={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=2},第三天={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0}},物理={Day1={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0},第2天={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0},第3天={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0},无={Day1}={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},第二天={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=2},第三天={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0}

第二个:

2{compu={Day1={Work hours=0,Study hours=0,Day grades=-1,sheet filled=0,Fun=0},Day2={Work hours=0,Study hours=0,Day3={Work hours=0,Study hours=0,Day grades=-1,sheet filled=0,Study grades=0,Day3={Work hours=0,Study=0,Study hours=0,Day3=-1,sheet filled=0,sty=0,Fun=0,Day2}={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},第三天={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},数学={Day1={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},Day2={工作时间=0,学习时间=0,日成绩=-1,填单=0,乐趣=0},第三天={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0}},物理={Day1={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0},第2天={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0},第3天={工作时间=0,学习时间=0,日成绩=-1,填写的表格=0,乐趣=0},无={Day1}={Work hours=0,Study hours=0,Day grades=-1,Sheets filled=0,Fun=0},Day 2={Work hours=0,Study hours=0,Day 3={Work hours=0,Study hours=0,Day grades=-1,Sheets filled=0,Fun=0}}

由于您有两个级别的hashmap,您复制的深度不够。请尝试替换
outerMap.putAll(copymap.get(currentfragment));
使用以下代码

HashMap<String, HashMap<String, Integer>> sample = themap.get(currentfragment);
for (String s : sample.keySet()) {
    outerMap.put(s, new HashMap<>(sample.get(s)));
}
HashMap-sample=themap.get(currentfragment);
对于(字符串s:sample.keySet()){
outerMap.put(s)、新HashMap(sample.get(s));
}

putAll
&
put
不会将对象深度复制到新的
outerMap
,它只是将引用存储在
Map
中。但是为什么
themap
在复制其内容的行之后发生了更改?我应该如何在不修改内容的情况下复制其内容?可能是外部方法通过
outerMap
请看我的编辑,好吗?你不应该编辑你的问题来输入答案。答案与问题是分开的。在使用Sun的复制方法更新复制方法之前,我已经尝试了你的代码,但它不起作用。
public static HashMap<String, HashMap<String, HashMap<String, Integer>>> copy(HashMap<String, HashMap<String, HashMap<String, Integer>>> original) {
    HashMap<String, HashMap<String, HashMap<String, Integer>>> copy = new HashMap<>();
    for (Map.Entry<String, HashMap<String, HashMap<String, Integer>>> entry : original.entrySet()) {
        HashMap<String, HashMap<String, Integer>> copyInnerMap = new HashMap<>();
        for (Map.Entry<String, HashMap<String, Integer>> innerEntry : entry.getValue().entrySet()) {
            HashMap<String, Integer> innerInnerMap = innerEntry.getValue();
            HashMap<String, Integer> copiedInnerInnerMap = new HashMap<>();
            for (Map.Entry<String, Integer> innerInnerMapEntry : innerInnerMap.entrySet()) {
                copiedInnerInnerMap.put(innerInnerMapEntry.getKey(), innerInnerMapEntry.getValue());
            }
            copyInnerMap.put(innerEntry.getKey(), copiedInnerInnerMap);
        }
        copy.put(entry.getKey(), copyInnerMap);
    }
    return copy;
}
HashMap<String, HashMap<String, Integer>> sample = themap.get(currentfragment);
for (String s : sample.keySet()) {
    outerMap.put(s, new HashMap<>(sample.get(s)));
}