更高效地创建新阵列或重置阵列

时间:2014-04-02 14:43:50

标签: java

我有一个包含6个元素的数组。将这些元素设置为null或创建新数组是否更有效(按时间)?我将使用这个数组数百次。

5 个答案:

答案 0 :(得分:5)

我会使用这种方法。

System.arraycopy

原生且效率很高。

每次我想重置数组时,我会保留一个空数组并使用此方法将其复制到我的数组中。所以我的建议不是每次都创建一个新数组,而是不循环(使用Java代码)并将元素设置为null。只需使用Java提供的本机方法。

import java.util.Arrays;


public class Test056 {

    public static void main(String[] args) {

        String[] arrNull = new String[10000];
        String[] arrString = new String[10000];

        long t1 = System.nanoTime();

        for (int i=0; i<10000; i++){
            System.arraycopy(arrNull, 0, arrString, 0, arrNull.length);
        }

        long t2 = System.nanoTime();

        System.out.println(t2 - t1);

        long t3 = System.nanoTime();

        for (int i=0; i<10000; i++){
            Arrays.fill(arrString, null);
        }

        long t4 = System.nanoTime();

        System.out.println(t4 - t3);
    }

}

答案 1 :(得分:2)

穆 - 你没有问正确的问题。

在您的应用程序中存在已知的性能瓶颈之前,不要担心这些简单操作的效率。

你说你将在几百次的时间内归零/创建6个引用。所以,你将创建/ nulling / looping&lt; 6000参考。这在现代编程中是微不足道的。

可能有更好的地方,你应该花费你的开发时间。

答案 2 :(得分:1)

创建一个新数组应该更有效时间,因为它只会分配空引用。
将元素设置为null意味着遍历整个数组以设置对null的引用(这是数组创建时的默认行为),这更耗时(即使对于6个元素的数组,它完全可以忽略不计)。登记/>
编辑:时间是大胆的,因为记忆方面可能不是你最好的选择。由于您要创建新引用,如果您实例化新对象,请确保前一个数组的对象被正确地垃圾收集(同样,只有6个元素,它必须是巨大的对象才能看到任何不良的性能影响)。 / p>

答案 3 :(得分:0)

以下代码表明,将每个值分配为null 可以更快 请注意,这对具有6个元素的数组有效。最终创建新阵列可能会更快。

    Object[] array = new Object[6];

    long start = System.nanoTime();

    for(int i = 0; i < Integer.MAX_VALUE; i++){
        array[0] = null;
        array[1] = null;
        array[2] = null;
        array[3] = null;
        array[4] = null;
        array[5] = null;
    }
    System.out.println("elapsed nanoseconds: " + (System.nanoTime() - start));
    int length = array.length;

    start = System.nanoTime();
    for(int i = 0; i < Integer.MAX_VALUE; i++){
        array = new Object[6];
    }
    System.out.println("elapsed nanoseconds: " + (System.nanoTime() - start));
    length = array.length;

和输出:

elapsed nanoseconds: 264095957
elapsed nanoseconds: 17885568039

答案 4 :(得分:-4)

创建数组的最佳和最安全的方法是下一个:

List<Object> myList = new ArrayList<Object>(0);

因此,每次你想要的时候都可以通过这种方式重新生成数组。您不需要设置为null。通过这种方式,阵列被破坏并在内存中重新生成。

您可以在Oracle Java documentation中阅读更多信息: