You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何基于小型int[]生成内容为重复序列的大型int[]数组

Java 重复小数组生成大数组的实现方案

方案1:全JDK版本通用、性能最优实现(基于System.arraycopy)

System.arraycopy是JDK提供的native级内存复制方法,比手动循环赋值效率高很多,是这类需求的首选方案:

import java.util.Arrays;

public class ArrayRepeatDemo {
    public static void main(String[] args) {
        int[] a = {1, 2, 3};
        int repeatTimes = 3;
        int[] b = repeatArray(a, repeatTimes);
        System.out.println(Arrays.toString(b)); // 输出 [1, 2, 3, 1, 2, 3, 1, 2, 3]
    }

    public static int[] repeatArray(int[] src, int repeatTimes) {
        // 边界校验
        if (src == null || src.length == 0 || repeatTimes <= 0) {
            return new int[0];
        }
        int srcLength = src.length;
        int[] result = new int[srcLength * repeatTimes];
        for (int i = 0; i < repeatTimes; i++) {
            // 逐次把原数组复制到目标数组的对应偏移位置
            System.arraycopy(src, 0, result, i * srcLength, srcLength);
        }
        return result;
    }
}

System.arraycopy参数说明:第一个参数为源数组,第二个为源数组复制的起始下标,第三个为目标数组,第四个为目标数组粘贴的起始下标,第五个为需要复制的元素数量。

方案2:Java 8+ 简洁Stream写法

如果对性能要求不极致,想要更简洁的代码,可以用IntStream流实现:

import java.util.Arrays;
import java.util.stream.IntStream;

public class ArrayRepeatDemo {
    public static void main(String[] args) {
        int[] a = {1, 2, 3};
        int repeatTimes = 3;
        int[] b = IntStream.range(0, repeatTimes)
                .flatMap(i -> IntStream.of(a))
                .toArray();
        System.out.println(Arrays.toString(b)); // 输出 [1, 2, 3, 1, 2, 3, 1, 2, 3]
    }
}

性能对比说明

  • 重复次数越多、原数组长度越大,System.arraycopy的优势越明显,比Stream写法效率高2~10倍不等
  • 单次复制的内存块越大,System.arraycopy的native优化收益越高

内容的提问来源于stack exchange,提问作者Gg GoodGame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:45:02