使用另一个索引映射Java存储一个映射

时间:2016-05-12 06:05:42

标签: java

我想将整个地图存储在另一个带索引的地图中。 我的代码如下:

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);
}

这里我总共有两张地图custMapmapCust。 所以我希望custMap作为索引地图,包含10个mapCust的子地图。

此处fname,lname,phone1和phone2对于每个地图mapCust都不同。

但是现在,我在所有10个子地图中都有10个子地图具有相同的值,例如mapCust的最后一个值。

2 个答案:

答案 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的相同实例。