HashMap共享对象问题

时间:2016-05-05 12:49:30

标签: java hashmap

我遇到了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存在的地方 ***编辑

1 个答案:

答案 0 :(得分:1)

我已经完成了你的代码,所有嵌套的HashMaps都有相同的值。因为在此循环中,您将byCountry[0]放入resHashMap

 for(int i = 0; i < 12; i++){
  resHashMap.put(i, new HashMap(byCountry[0]));
 }

因此,请尝试将byCountry[0]替换为byCountry[i]