Java .putAll()是否影响复制的变量?
我完全不知所措。这是我的密码 HashMap>>themap=newhashmap>>(); HashMap>outerMap=newhashmap>() EDIT2:我已经更新了复制方法,使其足够深入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
这是第一个输出:
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)));
}