【发布时间】:2014-09-27 05:42:43
【问题描述】:
我有一个toCopyHashMap,其格式为HashMap<String, Set<Integer>>。 toCopy的key是一个由两个数字组成的字符串,比如“01”或者“10”。
当我想为条目“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);
}
}
【问题讨论】:
-
请提供一个完整的工作示例来演示此行为。