在 Java 中对数组进行切片
本文将帮助你在 Java 中将数组切片为子数组。
Java 中的数组切片
数组切片是一种 Java 技术,用于从更广泛的数组中提取子数组。
假设 k[]
是一个数组。它有 7 个组件,编号为 k[0]
到 k[6]
。
k[] = {5, 6, 7, 8, 9, 10, 11}
现在,我们正在寻找 k[2]
和 k[5]
之间的数组索引切片。startIndex 是 k[2]
,而 endIndex 是 k[5]
。
结果,我们得到下面的切片数组:
k[] = {7, 8, 9, 10}
在接下来的部分中,我们将学习如何在 Java 中定位数组切片。
在 Java 中通过复制元素对数组进行切片
这是获取数组切片的内置方法。所提供数组的开始和结束索引最初在此过程中确定。
之后,我们生成一个与大小无关的空数组(切片数组)(endIndex - startIndex)。将项目(从 startIndex)从提供的数组复制到切片数组,最后打印切片数组。
让我们在 Java 程序中使用上述方式来获取所提供数组的切片数组。我们将在这个应用程序中使用一系列原始类型。
import java.util.Arrays;
public class Copy {
public static int[] getSlice(int[] arr, int stIndx, int enIndx) {
int[] sclicedArr = new int[enIndx - stIndx];
for (int i = 0; i < sclicedArr.length; i++) {
sclicedArr[i] = arr[stIndx + i];
}
return sclicedArr;
}
public static void main(String args[]) {
int[] arr = { 20, 65, 87, 19, 55, 93, 76, 98, 54, 21 };
int stIndx = 2, enIndx = 6;
int[] sclicedArr = getSlice(arr, stIndx, enIndx + 1);
System.out.println("Slice of an Array: " + Arrays.toString(sclicedArr));
}
}
要运行代码,请将程序保存为 Java 文件并在 Java IDE 中运行。
输出:
使用 Java 中的 copyOfRange()
方法对数组进行切片
Java Array 类包含 copyOfRange()
方法。它将数组的指定范围复制到新形成的数组(切片数组)中,并返回具有原始数组指定范围的新生成的数组。
对数组进行切片需要 O(n)
时间和 O(n)
空间来存储元素,其中 n
是结果数组中的元素数。
语法:
public static int[] copyOfRange(int[] original, int from, int to)
该方法解析以下 3 个参数:
-
original
:它是一个必须找到切片的数组。 -
from
:它是第一页的索引。它必须在 0 到数组长度的范围内。 -
to
:它是最后一个索引。
抛出以下异常:
如果起始索引小于 0 或大于原始数组的长度,则会抛出 ArrayIndexOutOfBoundsException
。如果开始索引比结束索引更重要,则会抛出 IllegalArgumentException
。
如果指定的数组为 null,则会抛出 NullPointerException
。
import java.util.Arrays;
public class Copy1 {
public static int[] slice(int[] arr, int stIndx, int enIndx) {
int[] sclicedArr = Arrays.copyOfRange(arr, stIndx, enIndx);
return sclicedArr;
}
public static void main(String args[]) {
int[] arr = { 20, 65, 87, 19, 55, 93, 76, 98, 54, 21 };
int stIndx = 3, enIndx = 8;
int[] sliceArray = slice(arr, stIndx, enIndx + 1);
System.out.println("Slice of Array: " + Arrays.toString(sliceArray));
}
}
要运行代码,请将程序保存为 Java 文件并在 Java IDE 中运行。
输出:
使用 Java 8 流对数组进行切片
我们可以按照以下说明使用 Java 8 Stream 来发现数组的切片。
- 首先找到开始和结束索引数组。
-
使用
range()
函数,将项目(在范围内)转换为原始流。 -
使用
map()
函数从数组映射提供的元素。 -
使用
toArray()
函数将映射数组转换为数组。 - 打印切片数组。
import java.util.Arrays;
import java.util.stream.IntStream;
public class NewClice {
public static int[] findSlice(int[] arr, int stIndx, int enIndx) {
int[] slice_arr = IntStream.range(stIndx, enIndx).map(i -> arr[i]).toArray();
return slice_arr;
}
public static void main(String args[]) {
int[] arr = { 20, 65, 87, 19, 55, 93, 76, 98, 54, 21, 657 };
int stIndx = 2, enIndx = 8;
int[] slice_arr = findSlice(arr, stIndx, enIndx + 1);
System.out.println("Slice of array for the specific range is: " + Arrays.toString(slice_arr));
}
}
要运行代码,请将程序保存为 Java 文件并在 Java IDE 中运行。