我期待结果如此
AA0={A0=0}, AA1={A1=1}, AA2={A2=2}, AA3={A3=3}, AA4={A4=4}
但是下面的代码我得到了结果 -
{AA4={A2=2, A1=1, A4=4, A3=3, A0=0}, AA2={A2=2, A1=1, A4=4, A3=3, A0=0}, AA3={A2=2, A1=1, A4=4, A3=3, A0=0}, AA0={A2=2, A1=1, A4=4, A3=3, A0=0}, AA1={A2=2, A1=1, A4=4, A3=3, A0=0}}
我在代码中做错了吗?我在调试期间看到的是,第二次运行for循环时,hashMap1
甚至在执行{AA0={A1=1}}
之前包含hashMap1.put("AA"+i,hashMap2)
。我不确定为什么会这样。有人可以帮我理解这个吗?
import java.util.HashMap;
public class testingMapList {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String, HashMap<String, Integer>> hashMap1 = new HashMap<String, HashMap<String, Integer>>();
HashMap<String, Integer> hashMap2 = new HashMap<String, Integer>();
for(int i=0;i<5;i++)
{
hashMap2.clear();
hashMap2.put("A"+i, i);
hashMap1.put("AA"+i, hashMap2);
}
System.out.println("HashMap1--->"+hashMap1.get("AA").containsValue("A=4"));
}
}
答案 0 :(得分:0)
您正在重复使用相同的hashMap2
。在循环中创建一个新的而不是清除它:
hashMap2 = new HashMap<>();
更好的是,在循环中声明变量,然后没有意外重复使用地图的风险(通过该变量)。
答案 1 :(得分:0)
下面的代码段应该满足您的要求。
public static void main (String[] args) throws java.lang.Exception
{
HashMap<String, HashMap<String, Integer>> hash = new HashMap<String, HashMap<String, Integer>>();
for(int i=0; i<5;i++){
HashMap<String, Integer> insideHash = new HashMap<String, Integer>();
insideHash.put("A"+i, i);
hash.put("AA"+i, insideHash);
}
System.out.println(hash);
}
结果
{AA0={A0=0}, AA1={A1=1}, AA2={A2=2}, AA3={A3=3}, AA4={A4=4}}