在 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