Map对象指针和Map.clear()

这两天调试项目的接口,2个接口都出现错误,问题排查很繁琐。但是排查出问题之后,发现出现的问题很逗比。记录下来纪念下逗比的程序之路


先上2段代码:
代码1

        Map<String ,Object> newmap =null;
        for(Map<String ,Object> map :listmap){
            newmap =new HashMap<String ,Object>();
            for(String param :listVirtualMachines_param){
                if(map.get(param)==null)
                    newmap.put(param, "");
                else
                    newmap.put(param, map.get(param));
            }
            listVcRe.add(newmap);
        }

代码2

        Map<String ,Object> newmap =new HashMap<String ,Object>();
        for(Map<String ,Object> map :listmap){
            newmap.clear();
            for(String param :listVirtualMachines_param){
                if(map.get(param)==null)
                    newmap.put(param, "");
                else
                    newmap.put(param, map.get(param));
            }
            listVcRe.add(newmap);
        }

以上2段代码,初看都是遍历循环listmap里面的对象,然后对map对象判断后封装到listVcRe。但是代码1可以达到目的,代码2就不行。使用代码2得到的listVcRe里面是N个相同的listmap[n-1]。不知道我这样描述大家是否能懂。

上面2个代码片段里面有个很重要而且很常用的知识点—–map指针。

首先2个for循环里面的每个map对象都是取的listmap里面的指针对象,对map进行操作 ,实际上是直接对listmap里面的一个map进行操作。这样说来,如果将一个map 放入listVcRe列表里面,其实代码1是把一个新的map指针放入listVcRe里面,代码2是把listmap里面的map对象的指针放入listVcRe里面。那现在代码1和代码2的区别就出了了,如果对2个代码片段进行执行,执行结果:

代码1:
[map1,map2,map3,....]
代码2:
[listmap[n-1],listmap[n-1],listmap[n-1],....]

本次的项目错误的问题原因就出现在这里,没有深入理解map指针对象,错误的使用clear()函数。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值