我有一个带有方法的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
差异可以忽略不计.我会说,只需要克隆(),因为它更易读,Arrays#copyOf()只是Java 6.
注意:实际结果可能取决于所使用的平台和JVM,这是在带有Intel P8400的Dell Latitude E5500,4GB PC2-6400 RAM,WinXP,JDK 1.6.0_17_b04上测试的