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

Java无需额外内存借助内置函数打印子数组的实现方法

Java无额外内存打印指定范围子数组的实现方案

你需要的不创建子数组副本的实现方式有两类,都可以满足低内存开销的需求,同时兼顾代码简洁性:


方案1:自定义通用工具方法(推荐,性能最优)

直接对原数组的指定索引范围遍历输出,完全不会创建额外的子数组对象,空间复杂度为O(1)(仅占用少量临时变量内存),输出格式可以完全对齐Arrays.toString()的标准格式:

import java.util.Objects;
public class ArrayUtils {
    public static void printSubArray(int[] array, int fromIndex, int toIndex) {
        // 参数合法性校验
        Objects.requireNonNull(array);
        if (fromIndex < 0 || toIndex >= array.length || fromIndex > toIndex) {
            throw new IllegalArgumentException("非法索引范围");
        }
        // 输出格式和Arrays.toString保持一致
        System.out.print("[");
        for (int k = fromIndex; k <= toIndex; k++) {
            System.out.print(array[k]);
            if (k != toIndex) {
                System.out.print(", ");
            }
        }
        System.out.println("]");
    }
}

调用方式非常简洁:

// 示例 i=3,j=6
ArrayUtils.printSubArray(array, 3, 6);
// 输出结果:[3, 4, 5, 6]

方案2:Java 8+ Stream流式实现(无需自定义工具类,代码简洁)

通过IntStream遍历索引直接取值,不会创建子数组副本,适合不想额外封装工具类的场景:

简化空格分隔输出:

import java.util.stream.IntStream;
// 示例 i=3,j=6
IntStream.rangeClosed(3, 6)
    .forEachOrdered(k -> System.out.print(array[k] + " "));
// 输出结果:3 4 5 6 

标准Arrays.toString格式输出:

import java.util.stream.Collectors;
import java.util.stream.IntStream;
// 示例 i=3,j=6
String res = IntStream.rangeClosed(3, 6)
    .mapToObj(k -> String.valueOf(array[k]))
    .collect(Collectors.joining(", ", "[", "]"));
System.out.println(res);
// 输出结果:[3, 4, 5, 6]

补充说明

你原本使用的普通for循环本身就已经是无额外子数组内存开销的实现,只是输出格式和复用性不足,上述两种方案都是在保留低内存优势的前提下,优化了代码简洁性和输出格式的适配。

内容的提问来源于stack exchange,提问作者GURU Shreyansh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:18:03