1. 程式人生 > >ArrayList add方法會導致資料覆蓋。

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方法每次都能夠成功的新增不同記憶體中資料,所以不會覆蓋。這個在實際開發過成中,坑了我一個下午,一開始我還以為是編譯器出現了問題。
特此記錄下。