オブジェクトを共有するHashMapsに問題があります。ネストされたHashMapはすべて同じ値を持ちます。どうすればこの問題を克服できますか? HashMapsを互いに独立させるためにはどうすれば作成できますか?HashMap共有オブジェクトの問題
これは私のDTOです。私の最初のIntegerオブジェクトは月を表す0-11の範囲です。文字列は国コード(すなわち「GB」)を表し、2番目の整数は人の総量を表します。その値を意味することになります。
public class ClientsByMonth {
private HashMap<Integer, HashMap<String, Integer>> res2015 = new HashMap<>();
ここでは、HashMapsを作成しようとしています。特定の月には値がないので、値を追加する前に0をすべて最初に置いていますが、0にする必要があります。明らかに以下は機能しません。 DTOは を存在する場所
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));
}
**です***私はあなたのコードを介して行っている
で
byCountry[0]
を置き換えることによって、試すのですか?それを地図の価値にしましょうか?ネストされたハッシュマップは、この単純なもののためのリソースの無駄のようです。 –resHashMap.put(i、新しいHashMap(byCountry [0])); byCountry [0]がハードコーディングされています。これは問題ありませんか? – Awadesh
私の前のポイントに加えて、外側のハッシュマップは必要ありません。あなたのキーはインデックスなので、Arraylistを使うべきです –