代码如下:
Map map = new HashMap();

Map smap = new HashMap();

Set set = new HashSet();

for(int i = 0;i<4;i++){

smap.clear();

set.clear();

for(int j = 0;j<4;j++){ if(i == j){

set.add(j);

smap.put(j, set);

}

}

map.put(i, smap);

System.out.println(map);
}
输出结果:
{0={0=[0]}}
{0={1=[1]}, 1={1=[1]}}
{0={2=[2]}, 1={2=[2]}, 2={2=[2]}}
{0={3=[3]}, 1={3=[3]}, 2={3=[3]}, 3={3=[3]}}
我想要的结果:
{0={0=[0]}}
{0={0=[0]}, 1={1=[1]}}
{0={0=[0]}, 1={1=[1]}, 2={2=[2]}}
{0={0=[0]}, 1={1=[1]}, 2={2=[2]}, 3={3=[3]}}
请问 怎样修改代码,请贴出代码,谢谢

解决方案 »

  1.   

    比较直接的是第一个for循环下两句clear换成
    Map smap = new HashMap();
    Set set = new HashSet();
    同时把原先的两句声明删除map在添加引用类型对象时,始终是一个的话,它的内容也会随之改变
      

  2.   

    set和smap每次put都要new一个出来
    不然同一个引用被你put来put去
    最后对应的永远是同一个对象 Map map = new HashMap();
    Map smap = null;
    Set set = null;
    for (int i = 0; i < 4; i++) {
    smap = new HashMap();
    set = new HashSet();
    for (int j = 0; j < 4; j++) {
    if (i == j) {
    set.add(j);
    smap.put(j, set);
    }
    }
    map.put(i, smap);
    System.out.println(map);
    }