加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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上测试的

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读