在做项目的过程中,经常用到ArrayList和MashMap。有时要重复用到相关的变量名(因为不想占用太多内存,所以用相同的变量名),所以经常重新new变量名。后来发现这两种类都有.clear()方法的,使用了一下,发现有时会产生不同的效果,但不确定。例如:ArrayList al=new ArrayList();
al.add("ddd");
al=new ArrayList(); //1
al.clear(); //2所以想问问,1和2这两种方式有什么不同,应该在什么不同的情况下使用?
谢谢。

解决方案 »

  1.   

    al=new ArrayList(); 重新将内存地址指向a1
    al.clear();  移除此列表中的所有元素。此调用返回后,列表将为空
      

  2.   

    我是这样想的,ArrayList删除效率高,因此如果其中数据不是很多的话,就用第二种方式;相反,如果数据多的话,就用第一种方式,以前的对像变成垃圾,等GC回收就是了!
      

  3.   

    1,使用al.clear()将容器清空
    2,使用new新建容器如何使用上面两种方法首先考虑的不是性能或者编程习惯,而是程序逻辑,如果al只是一个局部的变量那就没什么区别了,如果它是一个静态的或者其他形式的,有可能被另外的业务共享里面的数据,而这些部分要求数据一致,那就不能重新new,而应该使用clear()方法。所以,如果你的程序使用哪种方法效果都一样,那就比较自由了。否则就必须1,或者必须2了。
      

  4.   

    明白很多了,但还是有点担心,因为记忆中,试过在系统用clear()出现异常,但用new就运行正常的情况,但因为过的时间久了,而且系统日渐庞大,已经找不回是在哪里出的问题了。
    按照大家说的去做就是了。
    谢谢。
      

  5.   

    我终于查到我以前的一些代码,原来clear和new在使用上还是有很大的差别的,请看下面的代码:public static void main(String [] a){
    HashMap<String, HashMap> hm20100727=new HashMap<String, HashMap>();
    HashMap<String, String> hm20100727b=new HashMap<String, String>();
    hm20100727b.put("a", "1"); hm20100727b.put("b", "2");
    hm20100727.put("A", hm20100727b);
    System.out.println(hm20100727);
    hm20100727b.clear();
    hm20100727b.put("c", "3"); hm20100727b.put("d", "4");
    hm20100727.put("B",hm20100727b);
    System.out.println(hm20100727);
    hm20100727b=new HashMap<String, String>();
    hm20100727b.put("e", "5"); hm20100727b.put("f", "6");
    hm20100727.put("C", hm20100727b);
    System.out.println(hm20100727);
    hm20100727b.clear();
    hm20100727b.put("g", "7"); hm20100727b.put("h", "8");
    hm20100727.put("D", hm20100727b);
    System.out.println(hm20100727);
    /*
     * clear()之后,hm20100727b内的对象也没有了。
    {A={b=2, a=1}}
    {A={d=4, c=3}, B={d=4, c=3}}
    {A={d=4, c=3}, B={d=4, c=3}, C={f=6, e=5}}
    {D={g=7, h=8}, A={d=4, c=3}, B={d=4, c=3}, C={g=7, h=8}}
     */
    }clear可不能乱用,可能甚至是最好不用的哩,否则在不知道的情况下,就会不小心删除某个对象了。
      

  6.   

    这个问题有解决方法吗?
    若hm20100727为静态变量,改用new不成?