我遇到了HashMaps的问题,共享对象。所有嵌套的HashMaps都具有相同的值。我该如何克服这个问题?如何创建HashMaps以使它们彼此独立?
下面是我的DTO,我的第一个Integer对象的范围是0-11,表示月份。字符串表示国家/地区代码(即" GB"),第二个整数表示总人数。意味着将值添加到。
public class ClientsByMonth {
private HashMap<Integer, HashMap<String, Integer>> res2015 = new HashMap<>();
以下是我在尝试创建HashMaps的位置。在我开始为它们添加值之前,我首先将0添加到所有值,因为某些月份没有任何值,但我需要它为0.显然,下面的内容不起作用。
public class CBMSetter {
HashMap<Integer, HashMap<String, Integer>> resHashMap = new HashMap<>();
HashMap<String, Integer>[] byCountry = new HashMap[12];
String[] countrys = {"GB ", "PT ", "ES ", "BE ", "IE ", "FR ", "DE ", "CH ", "IR ", "NL ", " ", "Others"};
for(int i = 0; i < 12; i++){
byCountry[i] = new HashMap<>();
for(int k = 0; k < 12; k++){
byCountry[i].put(countrys[k], 0);
}
}
for(int i = 0; i < 12; i++){
*** resHashMap.put(i, new HashMap(byCountry[i]));
}
for(int i = 0; i < 12; i++){
**clientsBM.get(i).preSetRes( new HashMap(resHashMap));
}
**是DTO存在的地方 ***编辑
答案 0 :(得分:1)
我已经完成了你的代码,所有嵌套的HashMaps都有相同的值。因为在此循环中,您将byCountry[0]
放入resHashMap
。
for(int i = 0; i < 12; i++){
resHashMap.put(i, new HashMap(byCountry[0]));
}
因此,请尝试将byCountry[0]
替换为byCountry[i]