java中的映射键值对未正确

时间:2015-09-23 17:56:30

标签: java dictionary

我使用Map插入一些对象,同时让对象工作正常,  虽然迭代相同的地图我正确地得到对象的大小,但我只是得到了 最后一个对象,在所有迭代中,对于我的引用,我将所有代码粘贴如下,

package map;

    Map<Integer,ListLabcar> ma = new LinkedHashMap<Integer,ListLabcar>();
    ListLabcar lc = new ListLabcar();
    for(int l =0;l<5;l++){
        int j = 0;
        for(int i = 0;i<=3;i++){
            if(i==l){
                System.out.println("ok");
                j+=1;
                lc.setIn(j);
                lc.setS("a-"+l);break;
            }
            else{
                lc.setIn(l);
                lc.setS("zero-"+l);
                //break;
            }
        }
        ma.put(l, lc);
        System.out.println(ma.get(l).getIn());
        System.out.println(ma.get(l).getS());
    }System.out.println(ma.size());
    Set<Integer> ke = ma.keySet();
    for(Integer k:ke){
        System.out.println(k);
        System.out.println("int--->"+ma.get(k).getIn());
        System.out.println("sttr--->"+ma.get(k).getS());
    }
}

}

1 个答案:

答案 0 :(得分:0)

这一行必须在第一个for循环中。

ListLabcar lc = new ListLabcar();

您正在做的是重写值而不在地图中添加新对象。

编辑:

package map;

    Map<Integer,ListLabcar> ma = new LinkedHashMap<Integer,ListLabcar>();
    for(int l =0;l<5;l++){
        ListLabcar lc = new ListLabcar();
        int j = 0;
        for(int i = 0;i<=3;i++){
            if(i==l){
                System.out.println("ok");
                j+=1;
                lc.setIn(j);
                lc.setS("a-"+l);break;
            }
            else{
                lc.setIn(l);
                lc.setS("zero-"+l);
                //break;
            }
        }
        ma.put(l, lc);
        System.out.println(ma.get(l).getIn());
        System.out.println(ma.get(l).getS());
    }
    System.out.println(ma.size());
    Set<Integer> ke = ma.keySet();
    for(Integer k:ke){
        System.out.println(k);
        System.out.println("int--->"+ma.get(k).getIn());
        System.out.println("sttr--->"+ma.get(k).getS());
    }
}