我有DataSeries
一个方法接口
int[] getRawData();
由于各种原因(主要是因为我将其与MATLAB一起使用,并且MATLAB能够很好地处理int []),我需要返回一个数组而不是一个List。
我不希望我的实现类返回int []数组,因为它是可变的。复制int []数组(大小在1000-1000000长度范围内)的最有效方法是什么?是clone()
吗
唯一的选择是Arrays#copyOf()
(System#arrayCopy()
在引擎盖下使用)。
只是测试一下。
package com.stackoverflow.q2830456;
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) throws Exception {
Random random = new Random();
int[] ints = new int[100000];
for (int i = 0; i < ints.length; ints[i++] = random.nextInt());
long st = System.currentTimeMillis();
test1(ints);
System.out.println(System.currentTimeMillis() - st);
st = System.currentTimeMillis();
test2(ints);
System.out.println(System.currentTimeMillis() - st);
}
static void test1(int[] ints) {
for (int i = 0; i < ints.length; i++) {
ints.clone();
}
}
static void test2(int[] ints) {
for (int i = 0; i < ints.length; i++) {
Arrays.copyOf(ints, ints.length);
}
}
}
20203 20131
以及何时test1()
和test2()
被交换:
20157 20275
差异可忽略不计。我会说,clone()
因为它更容易阅读并且Arrays#copyOf()
仅Java 6 ,所以就去吧。
注意:实际结果可能取决于所使用的平台和JVM,已在带有Intel P8400、4GB PC2-6400 RAM,WinXP,JDK 1.6.0_17_b04的Dell Latitude E5500上进行了测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句