2014-04-02 59 views
1

我声明HashMap的内部HashMap的,但它需要重复的值在各重点为什么我没有得到嵌套HashMap的不正常

,当我宣布内环
我的代码链接这个问题解决...

public static void setM(){ 

    HashMap<String, HashMap<String, String>> response = new HashMap<String, HashMap<String,String>>(); 
    HashMap<String,String> link = new HashMap<String,String>(); 
    for(int i=0;i<6;i++){ 
     link.put("save_pont", "i"+i); 
     response.put(i+"",link);// error here for putting same value for all key 
     System.out.println("response -> "+response); 

    } 

} 

输出我得到......

response -> {0={save_pont=i0}} 
response -> {1={save_pont=i1}, 0={save_pont=i1}} 
response -> {2={save_pont=i2}, 1={save_pont=i2}, 0={save_pont=i2}} 
response -> {3={save_pont=i3}, 2={save_pont=i3}, 1={save_pont=i3}, 0={save_pont=i3}} 
response -> {3={save_pont=i4}, 2={save_pont=i4}, 1={save_pont=i4}, 0={save_pont=i4}, 4={save_pont=i4}} 
response -> {3={save_pont=i5}, 2={save_pont=i5}, 1={save_pont=i5}, 0={save_pont=i5}, 5={save_pont=i5}, 4={save_pont=i5}} 

,但我需要输出如..

response -> {0={save_pont=i0}} 
response -> {1={save_pont=i1}, 0={save_pont=i0}} 
response -> {2={save_pont=i2}, 1={save_pont=i1}, 0={save_pont=i0}} 
response -> {3={save_pont=i3}, 2={save_pont=i2}, 1={save_pont=i1}, 0={save_pont=i0}} 
response -> {3={save_pont=i3}, 2={save_pont=i2}, 1={save_pont=i1}, 0={save_pont=i0}, 4={save_pont=i4}} 
response -> {3={save_pont=i3}, 2={save_pont=i2}, 1={save_pont=i1}, 0={save_pont=i0}, 5={save_pont=i5}, 4={save_pont=i4}} 

回答

0

您正在使用的关键 “save_pont” 两次:

link.put("save_pont", "i"+i); 

因此删除以前的条目。我想你想要的是将嵌套的HashMap构造放入循环中。

+0

我知道这将删除链接,但我得到错误的输出响应变量 –

0

由于您使用相同的散列映射,只是覆盖值。 声明的散列映射内部for循环如下所示

public static void setM(){ 

     HashMap<String, HashMap<String, String>> response = new HashMap<String, HashMap<String,String>>(); 
     for(int i=0;i<6;i++){ 
      HashMap<String,String> link = new HashMap<String,String>(); 
      link.put("save_pont", "i"+i); 
      response.put(i+"",link); 
      System.out.println("response -> "+response); 

     } 

    } 
+0

我知道这是不得已而链接创建的每一个真实的情况 –

+0

@Rishi:分享您的完整代码,以便它将很容易分析 – KingMaker

+0

这是我完整的代码获得和期待输出 –

0

link对象改变每次循环迭代。这可以帮助你:

public static void setM(){ 

    HashMap<String, HashMap<String, String>> response = new HashMap<String, HashMap<String,String>>(); 

    HashMap<String,String>[] links = new HashMap<String,String>[6]; 

    for(int i=0;i<6;i++){ 
     links[i] = new HashMap<String,String>();  
     links[i].put("save_pont", "i"+i); 
    } 

    for(int i=0;i<6;i++){ 
     HashMap<String,String> link = new HashMap<String,String>(); 
     response.put(i+"",links[i]); 
     System.out.println("response -> "+response); 
    }  
} 
+0

但我不想创建链接每一个真实的条件 –

+0

回答编辑... –