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

来源:互联网 发布:免费啪啪的软件 编辑:程序博客网 时间:2024/05/01 11:01
  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方法每次都能够成功的添加不同内存中数据,所以不会覆盖。这个在实际开发过成中,坑了我一个下午,一开始我还以为是编译器出现了问题。
特此记录下。

0 0
原创粉丝点击