我有一个包含6个元素的数组。将这些元素设置为null或创建新数组是否更有效(按时间)?我将使用这个数组数百次。
答案 0 :(得分:5)
我会使用这种方法。
原生且效率很高。
每次我想重置数组时,我会保留一个空数组并使用此方法将其复制到我的数组中。所以我的建议不是每次都创建一个新数组,而是不循环(使用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中阅读更多信息: