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

前端之家收集整理的这篇文章主要介绍了Java:防御性地复制int []的最有效方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有方法的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上测试的

原文链接:https://www.f2er.com/java/127727.html

猜你在找的Java相关文章