ArrayList add方法会导致数据覆盖。

  ArrayList<HashMap<String, Object>> listData = new ArrayList<HashMap<String, Object>>();
  int number = 0;
  HashMap<String, Object> map = new HashMap<String, Object>();    
  while (number < 20) {
      if(number==19)
      {
          String name ="zcl";
          String user ="ewfe";
      } else{
           String name ="hehe";
          String user ="lailai";
      }
      map.put("name",name);
      map.put("user",user);
      listData.add(map);
      number++;
     System.out.println(listData);
}

这时候输出的listdata里面所有的值都是一样的,因为我们map的内层是不变的,我们每次调用函数改变的都是他的内容,也就是我们是添加了引用到add方法中,所以结果都是一样的,都是最后的数据覆盖了前面的数据。

ArrayList<HashMap<String, Object>> listData = new ArrayList<HashMap<String, Object>>();
  int number = 0;

 while (number < 20) {
       HashMap<String, Object> map = new HashMap<String, Object>();    
      if(number==19)
      {
          String name ="zcl";
          String user ="ewfe";
      } else{
           String name ="hehe";
          String user ="lailai";
      }
      map.put("name",name);
      map.put("user",user);
      listData.add(map);
      number++;
     System.out.println(listData);
}

把map的内存分配放到while循环里面,每次程序都会把map的内存进行重新分配,listData的add方法每次都能够成功的添加不同内存中数据,所以不会覆盖。这个在实际开发过成中,坑了我一个下午,一开始我还以为是编译器出现了问题。
特此记录下。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值