如下面的代码:HashMap map;
for(int i=0;i<10;i++)
  map=new HashMap();--- 比如上面这段代码,产生一个HashMap对象还是多个?

解决方案 »

  1.   

    我需要N个map放N个对象,每个map我Arraylist.add(map)加到list中。有什么方法,可以这样,做到尽量少的产生新对象吗?
      

  2.   

    这个确实要在循环中new HashMap
    List list=new ArrayList();
        for(int i=0;i<10;i++)
        {
             Map map=new HashMap();
             map.put("aaa","aaa"+i);
             map.put("bbb","bbb"+i);
             list.add(map);
        }
        Map map1=(Map)list.get(0);
        System.out.println("map1="+map1.get("aaa"));
      

  3.   

    是否有不同的见解?
    String s="hello"
    String s2=s;
    这里只产生一个对象。
    是否hashMap等也可以做到?
      

  4.   

    不合理^_^,因为你new了很多次^_^
      

  5.   

    楼主,对象变量与对象实例是两个概念。
    对象实例是新建立出来的,如new HashMap()、"hello"
    对象变量实际上是接收并保存实例内存首地址的指针HashMap map;
    for(int i=0;i<10;i++)
      map=new HashMap();
    是让变量map代表了解10个HashMap的实例String s="hello"
    String s2=s;
    是让变量s、s2都指向了存"hello"的首地址
      

  6.   

    如果不使用在循环中new HashMap 。
    HashMap map=new HashMap;
    for(int i=0;i<10;i++)
      m.put("object",i);
    循环完之后m实际上只相当于put了一次对吗?如果解决这样的问题,不让它产生多余的对象,而让它产生同等效果/
      

  7.   

    HashMap map=new HashMap;
    for(int i=0;i<10;i++)
      m.put("object",i);
    由于put方法的第一参数(key)相同,所以只相于放了最后一次,不过第二参数也要是对象哦!;
      

  8.   

    如果我new了十个map,然后一个个加入ArrayList里面,list里面有十个map,但是为什么就会有十个不同的map对象呢
      

  9.   

    会产生多个对象,map是最后一次执行完后的对象
      

  10.   

    可以这么说,对象相同的只有它本身!事实上无所谓什么对象相不相同,因为可以由自己定义!加入ArrayList的map对象之所以不同是可能因为HashMap的
    CompareTO()函数在起作用!请看http://dev.csdn.net/article/79/79500.shtm中的文章,里面有对容器和排序的详细介绍!
      

  11.   

    Q:如果我new了十个map,然后一个个加入ArrayList里面,list里面有十个map,但是为什么就会有十个不同的map对象呢A:你new 了10个map,内存中就有了10个不同的实例,这10个实例被加入ArrayList后就由ArrayList指向了,所以可以记下十个不同的map对象而HashMap是Key-Value对,如果put的Key与原有Key不同,就记录新的Key-Value对;如果有相同,就替换已有Key的对应Value
    不信你试试:Object obj=null;
    ArrayList array=new Array();
    for(int i=0;i<10;i++)
    {
        obj=new Object();
        array.add(obj);
    }
    System.out.println("array中有"+array.size+"个对象实例");HashMap map=new HashMap();
    for(int i=0;i<10;i++)
    {
        obj=new Object();
        map.put("a01",obj);
    }
    System.out.println("map中有"+map.size+"个对象实例");HashMap maps=new HashMap();
    for(int i=0;i<10;i++)
    {
        obj=new Object();
        maps.put("a0"+i,obj);
    }
    System.out.println("maps中有"+maps.size+"个对象实例");
      

  12.   

    lz:永远不要拿String当作参照物,String是java中除了Object以外,最特殊的一个class,由于它的使用量极大(我们几乎已把它视作是和int一样的原生类型),它受到了特殊照顾,编译器会在编译阶段尽其所能进行优化,例如直接把多个+拼接的字符串直接编译为一个String,(
    例如:String a = "abc" + "xyz" + "123" --编译--> String a = "abcxyz123")或者使用单个StringBuffer(例如String a = x + y + z --编译--> String a = new StringBuffer().append(x).append(y).append(z),当然如果是早期JDK的话,可能编译成多个StringBuffer)。如果你
    String s
    for (int i = 0; i < 10; i++) {
       s = new String("abc");
    }
    照样产生多个String
      

  13.   

    请问如果我把map赋给list, list.add(map);
    然后 map=null;这样处理,返回的list里面便是null对吗,就是说把map赋给list之后,list里面的内容仍然需要map的支持,对吗?
      

  14.   

    请问如果我把map赋给list, list.add(map);
    然后 map=null;这样处理,返回的list里面便是null对吗,就是说把map赋给list之后,list里面的内容仍然需要map的支持,对吗?是因为你的map与list中的元素指向的是同一个实例,所以你map=null;使list中也有了个空实例但你这样就不一样了:
    list.add(map);
    map=new HashMap();
    map=null;
    这时list中就没受影响。
    所以还是一句话你对“对象变量与对象实例是两个概念。”还是没想透
    对象实例是新建立出来的
    对象变量实际上是接收并保存实例内存首地址的指针
      

  15.   

    但你这样就不一样了:
    list.add(map);
    map=new HashMap();
    map=null;
    这时list中就没受影响。呵呵,但是这样基本上没什么意义啊,已经new了一个map,相当于已经创建了一个空对象了啊。楼上的别这么说,如果只有分数,这个论坛不会有这么多人上来。