HOWTO · Java

在 Java 中對陣列進行切片

本文將幫助你在 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