我想将整个地图存储在另一个带索引的地图中。 我的代码如下:
HashMap<Integer, Map<String, String>> custMap = new HashMap<Integer, Map<String, String>>();
Map<String, String> mapCust = new HashMap<String, String>();
for (int i = 0; i < 10; i++) {
mapCust.put("fname", fname);
mapCust.put("lname", lname);
mapCust.put("phone1", phone1);
mapCust.put("phone2", phone2);
custMap.put(i, mapCust);
}
这里我总共有两张地图custMap
和mapCust
。
所以我希望custMap
作为索引地图,包含10个mapCust
的子地图。
此处fname,lname,phone1和phone2对于每个地图mapCust
都不同。
但是现在,我在所有10个子地图中都有10个子地图具有相同的值,例如mapCust
的最后一个值。
答案 0 :(得分:5)
HashMap
将保留引用,因此您必须创建新对象以分配给每个键。
HashMap<Integer, Map<String, String>> custMap = new HashMap<Integer, Map<String, String>>();
for (int i = 0; i < 10; i++) {
Map<String, String> mapCust = new HashMap<String, String>(); // move this line inside the loop
mapCust.put("fname", fname);
mapCust.put("lname", lname);
mapCust.put("phone1", phone1);
mapCust.put("phone2", phone2);
custMap.put(i, mapCust);
}
答案 1 :(得分:2)
每次迭代时都会创建HashMap
的新实例
HashMap<Integer, Map<String, String>> custMap = new HashMap<Integer,Map<String, String>>();
for (int i = 0; i < 10; i++) {
Map<String, String> mapCust = new HashMap<String, String>();
mapCust.put("fname", fname);
mapCust.put("lname", lname);
mapCust.put("phone1", phone1);
mapCust.put("phone2", phone2);
custMap.put(i, mapCust);
}
之前您一次又一次使用mapCust
的相同实例。