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