Java是否存在不使用循环获取数组指定索引范围元素的函数
问题描述
咨询Java中是否存在无需手写循环的函数,可检查数组指定索引范围的取值,例如识别示例数组Array1索引范围[0,5]的子数组元素是否为{1,2,3,4,5},示例数组定义如下:
int Array1[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
解答
Java标准库提供了封装好的数组操作方法,无需手动编写循环即可实现该需求,需要注意:所有这类方法底层仍然会遍历对应索引范围的元素做比对,只是循环逻辑由标准库实现,不需要开发者手写。
可用方案如下:
- Java 9及以上版本:使用
Arrays.compare范围比较(推荐)
该方法支持直接对比两个数组的指定片段,不需要额外拷贝数组,性能最优。
注意方法的索引参数遵循左闭右开规则,要取索引0到5的共6个元素,结束索引需要传入6。
示例代码:import java.util.Arrays; public class RangeCheck { public static void main(String[] args) { int[] Array1 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; int[] target = {1,2,3,4,5}; // 对比Array1[0,6) 和 target[0,5) 的元素是否完全一致 int compareResult = Arrays.compare(Array1, 0, 6, target, 0, target.length); boolean isMatch = compareResult == 0; System.out.println(isMatch); // 运行输出true } } - Java 8兼容版本:使用
Arrays.copyOfRange+Arrays.equals
如果使用Java 8版本,没有带范围参数的compare方法,可以先拷贝出指定范围的子数组,再和目标数组做全量相等判断。
该方法会生成新的子数组对象,存在少量额外内存开销。
示例代码:import java.util.Arrays; public class RangeCheckJava8 { public static void main(String[] args) { int[] Array1 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; int[] target = {1,2,3,4,5}; int[] subArray = Arrays.copyOfRange(Array1, 0, 6); boolean isMatch = Arrays.equals(subArray, target); System.out.println(isMatch); // 运行输出true } }
内容的提问来源于stack exchange,提问作者damudread
相关产品推荐
相关产品推荐

