有关ArrayList增加Map引发的一个BUG

今天碰到一个很奇怪的问题。用一个ArrayList来增加map.具体是这样的:

[java]

  1. for(int i=0;i<arr.length();++i){  
  2.                                  temp = (JSONObject) arr.get(i);    
  3.                                  mapTemp.clear();  
  4.                                  mapTemp.put(“materialName”, temp.getString(“materialName”));  
  5.                                  mapTemp.put(“materialFormat”, temp.getString(“unitName”));   
  6.                                  mapTemp.put(“id”, temp.getString(“id”));  
  7.                                  listItem.add(mapTemp);  
  8.                                  Log.i(“mapGet=========”, listItem.get(i).get(“materialName”));  
  9.                             }  

本来是为了效率考虑,不用每次都重新创建MAp.就使用他的clear方法。结果发现竟然List中存放的MAP数据都是相同的。当时觉得很不可理解。

后来经过跟踪发现了问题,List每次把map的引用存进去,当调用map的clear()方法后,map里面数据会被清空,最后map的数据就是最后放进去的。而List里放的都是这个map的引用。因此也就不难理解为什么会出现存放的数据是最后一次放进去的情况了。
解决的方法就是每次都要创建。。。。
[java]

  1. HashMap<String, String> mapTemp = null;  
  2.                         for(int i=0;i<arr.length();++i){  
  3.                              temp = (JSONObject) arr.get(i);    
  4.                              mapTemp = new HashMap<String, String>();  
  5.                              mapTemp.put(“materialName”, temp.getString(“materialName”));  
  6.                              mapTemp.put(“materialFormat”, temp.getString(“unitName”));   
  7.                              mapTemp.put(“id”, temp.getString(“id”));  
  8.                              listItem.add(mapTemp);  
  9.                              Log.i(“mapGet=========”, listItem.get(i).get(“materialName”));  
  10.                         }  

标签