在List中add对象,如果此对象是一个List或Map之类的话,当add完之后改对象发生变化,那么对应List里也会有变化,因为他们是同一个对象,代码如下:
public static void main(String[] args){
ArrayList ls = new ArrayList();
HashMap map = new HashMap();
for (int i = 1; i <= 10; i++){
map.put("key1", ""+i);
ls.add(map);
}
System.out.println(ls);
}
结果就是[{key1=10}, {key1=10}, {key1=10}, {key1=10}, {key1=10}, {key1=10}, {key1=10}, {key1=10}, {key1=10}, {key1=10}]
如果想得到[{key1=1}, {key1=2}, {key1=3}, {key1=4}, {key1=5}, {key1=6}, {key1=7}, {key1=8}, {key1=9}, {key1=10}],现在我是这样做的:
public static void main(String[] args){
ArrayList ls = new ArrayList();
for (int i = 1; i <= 10; i++){
HashMap map = new HashMap();
map.put("key1", ""+i);
ls.add(map);
}
System.out.println(ls);
}
在循环中new一个Map,我想知道有没有更好的实现方式,谢谢!!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【gryes】截止到2008-07-22 14:07:16的历史汇总数据(不包括此帖):
    发帖的总数量:4                        发帖的总分数:60                       每贴平均分数:15                       
    回帖的总数量:12                       得分贴总数量:7                        回帖的得分率:58%                      
    结贴的总数量:4                        结贴的总分数:60                       
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:25.00 %               无满意结分率:33.33 %                  
    敬礼!
      

  2.   

    把  HashMap map = new HashMap();  放到for循环里面
      

  3.   

    道理就是这样的啊,你做对了的啊。改变同一个对象的值肯定会改变到list中add的对象。
      

  4.   

    public static void main(String[] args){
    ArrayList ls = new ArrayList();
    for (int i = 1; i <= 10; i++){
    HashMap map = new HashMap();
    map.put("key1", ""+i);
    ls.add(map);
    }
    System.out.println(ls);
    }     我只知道这个解法。或者你可以
    public static void main(String[] args){
    ArrayList ls = new ArrayList();
    for (int i = 1; i <= 10; i++){
    HashMap map = new HashMap();
    map.put("key"+1, ""+i);}
    ls.add(map);
    System.out.println(ls);
    } 这样就只有一个map  打印出来的是map对象的地址了。
      

  5.   

    如果有个复杂的逻辑,需要数据结构的嵌套实现,会出现类似的多层循环结构,那么这样在循环里new对象的做法效率是很低,不知道大家有没有遇到过类似问题,有什么好的解决方案。
      

  6.   

    import java.util.*;public class tt{
    public static void main(String[] args){
    ArrayList ll = new ArrayList();

    for(int i=0;i<10;i++){
    HashMap mm= new HashMap();
    mm.put("aaa", i);
    ll.add(mm);
    }
    System.out.println(ll);
    }

    }
    new一个和new多个的问题,好东西
      

  7.   

    其实有一个小小的改进,就是把声明写在for循环之外HashMap mm = null;
    for(int i=0;i <10;i++){
    mm = new HashMap();
    mm.put("aaa", i);
    ll.add(mm);
    }
    当然这并没有实质性的改变,只不过引用变量mm将只有一个,而原来的写法应该会产生多个引用变量mm。
    至于new HashMap(),数据结构需要的话,还是得new,除非好好设计下数据结构。
      

  8.   

    做项目的时候会有这种结构的设计:查询一系列信息=〉放到数组里=〉由于会有多条就有多个数组所以放到一个List里=〉那这个List又会是多条的那么返回的时候又要放到一个List里。
    这种情况出现的话,就会遇到我所说的再循环中new对象的问题了,这种做法在效率上说是不好的,就是不知道有没有好的做法,难道只能在设计数据结构上考虑避免出现这样的问题吗?
    大家讨论一下!!!
      

  9.   

    其实你的那个问题就是Map中键的问题
    你每次都用一样的键值,new了很多对象这样浪费资源
    public static void main(String[] args){ 
    ArrayList ls = new ArrayList(); 
    HashMap map = new HashMap(); 
    for (int i = 1; i <= 10; i++){ map.put("key"+1, ""+i); } 
    ls.add(map); 
    System.out.println(ls); 
    }
    这样我想会比较好不用浪费资源
      

  10.   

    就是key必须一样才有这个问题的啊
      

  11.   

    知道你要干么了,那这样每次都new,很浪费啊。
    你这样肯定行啊,添加到的都是单独的map。