
Java 不支持类似 Ruby 的 arr[1..10] 范围语法,但可通过 Arrays.copyOfRange() 高效提取子数组,该方法接受起始索引(含)和结束索引(不含),返回新数组。
java 不支持类似 ruby 的 `arr[1..10]` 范围语法,但可通过 `arrays.copyofrange()` 高效提取子数组,该方法接受起始索引(含)和结束索引(不含),返回新数组。
在 Java 中,数组本身不提供原生的范围切片(slice)操作语法(如 Ruby 的 arr[1..10] 或 Python 的 arr[1:11])。这意味着你无法通过简洁的方括号语法直接获取子区间——但标准库已为此场景提供了成熟、安全且高效的解决方案:java.util.Arrays.copyOfRange()。
该方法签名如下:
public static <t> T[] copyOfRange(T[] original, int from, int to)</t>
适用于所有引用类型数组;对应基本类型(如 int[]、double[] 等)也有重载版本。关键特性包括:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 左闭右开区间:from 包含,to 不包含(即提取索引 [from, to) 范围内的元素);
- 自动边界检查:若 from original.length 或 from > to,将抛出 ArrayIndexOutOfBoundsException;
- 返回新数组:原始数组不受影响,符合不可变操作原则,避免副作用。
✅ 正确用法示例:
import java.util.Arrays;
public class ArraySliceExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// 提取索引 1 到 10(含) → 对应 Ruby 的 arr[1..10]
int[] sub = Arrays.copyOfRange(arr, 1, 11); // 注意:end=11,非10
System.out.println(Arrays.toString(sub)); // 输出: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
}
}
⚠️ 注意事项:
- 若需打印子数组内容,务必配合 Arrays.toString()(对基本类型)或 Arrays.deepToString()(对对象数组),直接 System.out.println(sub) 仅输出哈希码;
- copyOfRange 返回的是新数组副本,修改它不会影响原数组,适合函数式或安全拷贝场景;
- 对于高频切片操作或超大数组,可考虑使用 List.subList()(需先转为 List),但注意其返回的是原列表的视图(非独立副本),修改会影响源数据。
总结:虽然 Java 缺乏语法糖级别的范围表达,但 Arrays.copyOfRange() 是标准、可靠且性能优良的替代方案——掌握其“左闭右开”语义与边界行为,即可精准实现任意子数组提取需求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










