關於for循環中引用同一個對象,列如map,導致添加的數據永遠是最後一個

今天開發遇到的問題,想用map裝數據,只是在for循環之外new了一個map,想做for中用,改變裏面的值,放入list中,結果導致數據都是一樣的,最後只有每次新new一個對象

 

代碼:

  for (int i=0;i<collection.size();i++) {
            
            
            //注意:這裏沒有采用同一個map對象,每次都是new的新對象,如果採用的是同一個對象,list
            //存儲的就是之前map地址的引用,當map的值進行改變,list存的值就會改變,因爲list中存
            //的不是值,是map對象地址的引用。用同一個map對象,所以導致list中值都是一樣的,並且和
            //最後一個map值相等


            
            
            Map<String, String>    map = new HashMap<String, String>(1);
            Document d =  collection.get(i);
            map.put("date", d.get("LogTime").toString());
            map.put("count", d.get("questions").toString());            
            listQus.add(map);
        
            Map<String, String>    map1 = new HashMap<String, String>(1);
            map1.put("date", d.get("LogTime").toString());
            map1.put("count", d.get("comSelect").toString());
            listSelect.add(map);
        
            
            Map<String, String>    map2 = new HashMap<String, String>(1);
            map2.put("date", d.get("LogTime").toString());
            map2.put("count", d.get("comInsert").toString());
            listInsert.add(map);
          
            Map<String, String>    map3 = new HashMap<String, String>(1);
             map3.put("date", d.get("LogTime").toString());
            map3.put("count", d.get("comUpdate").toString());
            listUpdate.add(map);
          
            Map<String, String>    map4 = new HashMap<String, String>(1);
            map4.put("date", d.get("LogTime").toString());
            map4.put("count",d.get("comDelete").toString());
            listDelete.add(map);
           
        }

但是感覺解決比較蠢

井底之蛙,坐井觀天,學無止境   記錄。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章