ArrayList.clear() vs ArrayList=null



其中哪一个在Java中运行更快?假设我想多次使用arraylist,但具有不同的值,因此最好使用clear()方法或将arraylist设置为null ??

1)实际上,您要比较的不是

temp=null; versus temp.clear();

但是

temp=new ArrayList<>(); versus temp.clear();

或说不同的说法:我们应该创建一个新的ArrayList或通过调用clear()

查看此代码,该代码不会回收旧的ArrayList实例:

    for(int i=0;i<2000;i++)
    {
        temp=new ArrayList<Integer>();
        for(int j=0;j<2000;j++)
        {
            temp.add(j);
        }
        ret.add((ArrayList<Integer>)temp.clone());
        temp=null;
    }

temp=null是外部for语句的最后一个语句,在此for的每次迭代开始时,temp变量先前引用的ArrayList对象被丢弃为新的ArrayList并分配给。

因此,将其分配给null是如此无用。

2)您的测试有偏见。
回收ArrayList实例可提供更好的结果,因为您的用例适合。

ArrayList备份到数组。
在外循环的第一次迭代中,内部循环的迭代使后排阵列生长多次。
因此,在外循环的下一次迭代中,它利用了后面的数组具有目标尺寸。
因此不需要后背阵列的生长。

例如,如果您更改了在每次迭代中重新创建ArrayList的新实例的代码版本,以用2000作为参数调用构造函数public ArrayList(int initialCapacity),则应改善实际的最慢版本。

,为了知道这一点,我使用不同的方法清除数组两次。首先,我使用了清晰的方法

    `class Check
     {
        public static void main (String[] args) throws java.lang.Exception
        {
            ArrayList<ArrayList<Integer>> ret=new ArrayList<ArrayList<Integer>>();
            ArrayList<Integer> temp=new ArrayList<Integer>(2000);
            for(int i=0;i<2000;i++)
            {
                for(int j=0;j<2000;j++)
                {
                    temp.add(j);
                }
                ret.add((ArrayList<Integer>)temp.clone());
                temp.clear();
            }
        }
    }

`

我得到了以下统计信息:运行时:1.87S内存:4386816KB

另一方面,当我使用以下代码运行NULL方法时。
`   class Check
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            ArrayList<ArrayList<Integer>> ret=new ArrayList<ArrayList<Integer>>();
            ArrayList<Integer> temp;
            for(int i=0;i<2000;i++)
            {
                temp=new ArrayList<Integer>(2000);
                for(int j=0;j<2000;j++)
                {
                    temp.add(j);
                }
                ret.add((ArrayList<Integer>)temp.clone());
            }
        }
    }

`我的统计数据是运行时:0.19S内存:4386816KB

因此,很明显," clear()"工作速度比" null"方法慢,尽管它们使用的内存相同。

最新更新