Java:防御复制int []的最有效方法?

杰森S:

我有DataSeries一个方法接口

int[] getRawData();

由于各种原因(主要是因为我将其与MATLAB一起使用,并且MATLAB能够很好地处理int []),我需要返回一个数组而不是一个List。

我不希望我的实现类返回int []数组,因为它是可变的。复制int []数组(大小在1000-1000000长度范围内)的最有效方法是什么?clone()

BalusC:

唯一的选择是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Linux中复制文件的最有效方法

复制 Excel 工作表的最有效方法?

在iOS的Sqlite中复制行的最有效方法

Java:更改方法参数的最有效方法

将RGB转换为int的最有效方法?

Java:使用ArrayList编写pojo的最有效方法

用Java搜索键值对的最快,最有效的方法?

用Java增加Map值的最有效方法

用Java扩展数组的最有效方法?

用Java编写分支代码的最有效方法

从Java中的数组制作直方图的最有效方法

使用toString()JAVA的最有效方法

将std :: deque内容复制到字节数组的最有效方法

从JavaScript中的对象复制某些属性的最有效方法是什么?

实现基于整数的幂函数pow(int,int)的最有效方法

Java,将String数组作为方法参数传递的最有效方法

Java方法“ Arrays.deepToString()”是打印2D数组的最有效方法吗?

从int值创建BigInteger实例的最有效方法是什么?

将int转换为String的最有效方法是什么?

从Int列获取最大值的最佳和最有效的方法是什么?

在Java中检测偶数最有效的方法是什么?

查找Java中最左/最右未设置位的索引的最有效方法是什么?

查找3个数字中最小的Java的最有效方法?

Java-将TreeSet <String>转换为String []的最有效方法?

检查两个java对象的Deep Equal的最快,最有效的方法是什么?

在Java中对扩展任意长度的位模式进行签名的最有效方法是什么?

Java 8-将List <byte []>合并为byte []的最有效方法

Java 8,从列表返回重复项(不删除它们)的最有效方法?

在Java中将String转换为Integer的最有效方法