简体   繁体   中英

HashMap Sharing object issue

I am having the issue with the HashMaps, sharing the object. All the nested HashMaps have the same values. How do I overcome this issue? How do I create the HashMaps so they are independent from one another?

This below is my DTO, my first Integer object is going to range from 0-11, representing the months. The String represents country codes (ie, "GB"), and the second Integer represents total amount of people. Meaning that value will be added to.

public class ClientsByMonth {
private HashMap<Integer, HashMap<String, Integer>> res2015 = new HashMap<>();

Below is Where I am trying to create the HashMaps. I am putting 0 to all first before I start adding values to them because certain months don't have any value but I need it to be 0. Obviously the below is not working.

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));
   }

** is where the DTO exists *** edited

I have gone through your code, all the nested HashMaps have the same values. Because in this loop, you are putting byCountry[0] in resHashMap .

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

So solution is try by replacing byCountry[0] with byCountry[i]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM