每当我开始设置HashMaps时,值都会被复制。我相信在启动HashMap时我不明白这是一些Java规则。下面是我的HashMaps的DTO。
public class ClientsByMonth {
private int pax;
private int folios;
private int totalStays;
private HashMap<String, Integer> byCountry = new HashMap<>();
private HashMap<String, Integer> groups = new HashMap<>();
以下是我初始化HashMaps的地方。
public class CMBSetter{
private HashMap<Integer, Clients> clients = new HashMap<>();
private HashMap<Integer, ClientsByMonth> clientsBM = new HashMap<>();
public void preSetterList(){
// ---- --- COUNTRY SETTER --- ----
HashMap<String, Integer> byCountry = new HashMap();
String[] countrys = {"GB ", "PT ", "ES ", "BE ", "IE ", "FR ", "DE ", "CH ", "IR ", "NL ", " ", "Others"};
for(int i = 0; i < 12; i++){
byCountry.put(countrys[i], 0);
}
// **** *** GROUPS SETTER *** ****
HashMap<String, Integer> groups = new HashMap<>();
Collection<String> keysGroup = groups.keySet();
groups.put("test", 0);
Collection<Integer> keysCleint = clients.keySet();
for(Integer keyC: keysCleint){
String groupNameClient = clients.get(keyC).getGroupName();
boolean namefound = false;
for(String keyG: keysGroup){
if(groupNameClient.equals(keyG)){
namefound = true;
}
}
if(!namefound){
groups.put(groupNameClient, 0);
}
}
// _)_)_)_ )_)_ DTO SETTER )_)_ _)_)_)_
for(int i = 0; i < 12; i++){
clientsBM.put(i, new ClientsByMonth());
clientsBM.get(i).setByCountry(byCountry[i]);
clientsBM.get(i).setGroups(groups);
}
}
我的问题:
如何初始化HashMaps,以便在设置时不复制值? 如何在不出现此问题的情况下初始化HashMaps?
我要做的是:
I.E.2-我想在我的DTO ClientsByMonth中填写我的byCountry HashMap。例如(&#34; GB&#34;,0)和(&#34; IR&#34;,0)和(&#34; DE&#34;,0)。
I.E.2-我希望Groups setter遍历客户端HashMap,并将GroupName()下存在的所有名称存储在我的新HashMap中,该HashMap具有带HashMap的DTO对象。诸如HashMap组(BIT,0)和(BOOKING,0)和(TRVLFAR,0)之类的值。
我首先创建(预设)所有&#34;标签/键&#34;在HashMap中,因为当我尝试迭代空的哈希映射时,我总是得到Null指针错误。
答案 0 :(得分:0)
<强>解决方案强> 来自评论
Joop Eggen
一个初学者在做类似事情时的陷阱 clientsBM.get(ⅰ).setGroups(组);是你现在正在分享 群体持有的对象。之后对团体的任何更改都将适用 所有客户BMM .get(i)
<强> heniv181 强>
&#34;我首先创建(预置)所有&#34;标签/键&#34;在HashMap中 因为当我尝试迭代时,我总是得到Null指针错误 在哈希映射上是空的&#34;。使用keySet中的Iterator来避免 打空。