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 中的 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 中執行。