我有一個toCopy
HashMap
它的形式爲HashMap<String, Set<Integer>>
。 toCopy
的密鑰是由兩個數字組成的字符串,如「01」或「10」。關於Java HashMap:當密鑰是一組時<Integer>
當我想以一個值添加到條目「01」,我做了
toCopy.get("01").add(1);
在這種情況下,由於某種原因,這兩個「01」和「10」項值進行了更新。有人可以幫我弄清楚爲什麼會發生這種情況?
我也試着這樣做:
Set<Integer> a = toCopy.get("01")
a.add(1)
toCopy.put("01",a)
但結果是一樣的。
我試着用調試器來找出發生了什麼事情,但似乎HashMap中剛剛更新在同一時間兩個條目..
編輯:這裏是我的代碼
Map<String,Set<Integer>> toCopy = new HashMap<>();
// initialize toCopy map
for(int d1 = 0; d1<dataCenters;d1++){
for(int d2 = 0; d2<dataCenters;d2++){
if(d1!=d2){
Set<Integer> value = new HashSet<>();
String key1 = Integer.toString(d1).concat(Integer.toString(d2));
String key2 = Integer.toString(d2).concat(Integer.toString(d1));
toCopy.put(key1,value);
toCopy.put(key2,value);
}
}
}
System.out.println(toCopy);
for(int i = 0; i < dataCenters; i++){
for(int j = 1; j < dataCenters-1; j++){
// data from two centers
Set<Integer> d1Data = data.get(i);
Set<Integer> d2Data = data.get(j);
// d1 => d2
// loop over data in d1, find those needed to be transferred
for(Integer d1: d1Data) {
String d1Tod2 = Integer.toString(i).concat(Integer.toString(j));
if(!d2Data.contains(d1)){
toCopy.get("01").add(d1);
}
}
請提供全面,工作例子演示了這種行爲。 – 2014-09-27 05:44:37