Java:防御性地复制int []的最有效方法?
发布时间:2020-05-25 16:11:39 所属栏目:Java 来源:互联网
导读:我有一个带有方法的DataSeries接口 int[] getRawData(); 由于各种原因(主要是因为我在MATLAB中使用它,并且MATLAB很好地处理int [])我需要返回一个数组而不是List. 我不希望我的实现类返回int []数组,因为它是可变的.复制int []数组的最有效方法是什么(1000-10
|
我有一个带有方法的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上测试的 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
