首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套HashMap无法正常工作

嵌套HashMap无法正常工作
EN

Stack Overflow用户
提问于 2014-04-02 21:03:14
回答 3查看 64关注 0票数 1

我在HashMap中声明了HashMap,但它对所有键都采用了重复的值,这就是为什么我没有得到

当我在循环中声明link时,这个问题就解决了

我的代码...

代码语言:javascript
运行
复制
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);

    }

}

我得到的输出......

代码语言:javascript
运行
复制
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}}

但是我需要像这样的输出。

代码语言:javascript
运行
复制
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}}
EN

回答 3

Stack Overflow用户

发布于 2014-04-02 21:06:30

您正在使用键"save_pont“两次:

代码语言:javascript
运行
复制
link.put("save_pont", "i"+i);

从而擦除先前的条目。

票数 0
EN

Stack Overflow用户

发布于 2014-04-02 21:11:16

因为您使用的是相同的hashmap,只是覆盖了这些值。在for循环中声明hashmap,如下所示

代码语言:javascript
运行
复制
 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
EN

Stack Overflow用户

发布于 2014-04-02 21:11:17

link对象在每次循环迭代时都会发生变化。这可能会对你有所帮助:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22812385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档