在 Java 中对数组进行切片

Shiv Yadav 2024年2月15日
  1. Java 中的数组切片
  2. 在 Java 中通过复制元素对数组进行切片
  3. 使用 Java 中的 copyOfRange() 方法对数组进行切片
  4. 使用 Java 8 流对数组进行切片
在 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 数组拼接 - 输出 1

使用 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 数组拼接 - 输出 2

使用 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 中运行。

Java 数组拼接 - 输出 3

作者: Shiv Yadav
Shiv Yadav avatar Shiv Yadav avatar

Shiv is a self-driven and passionate Machine learning Learner who is innovative in application design, development, testing, and deployment and provides program requirements into sustainable advanced technical solutions through JavaScript, Python, and other programs for continuous improvement of AI technologies.

LinkedIn

相关文章 - Java Array