陣列切片是一種取得給定陣列的子陣列的方法。假設,a[] 是一個陣列。它有8 個元素,索引從a[0] 到a[7]
int a[] = {8, 9, 4, 6, 0, 11, 45, 21}
我們需要找到陣列索引的子集,範圍為從a[3] 到a[6]。 startIndex 對應 a[3],而 endIndex 對應 a[6]。因此,我們得到以下切片
a[] = {6, 0, 11, 45}
有以下三種方法可以找到陣列的切片:
透過複製元素
透過使用copyOfRange() 方法
使用Java 8 流
#首先,我們找到給定陣列的開始和結束索引。
之後,我們建立一個大小為 (endIndex - startIndex) 的空數組(切片陣列)。
從給定的陣列中,將元素(從 startIndex)複製到切片陣列。最後,列印切片數組。
public class Test { public static void main(String[] args) { int[] array = {0,1,2,3,4,5,6,7,8,9}; int startIndex = 3, endIndex = 8; int[] slicedArray = getSlice(array, startIndex, endIndex + 1); System.out.println("Slice of Array: "+ Arrays.toString(slicedArray)); } public static int[] getSlice(int[] array, int startIndex, int endIndex) { int[] slicedArray = new int[endIndex - startIndex]; //将数组元素从原始数组复制到新创建的切片数组 for (int i = 0; i < slicedArray.length; i++) { slicedArray[i] = array[startIndex + i]; } return slicedArray; } }
結果如下:
Slice of Array: [3, 4, 5, 6, 7, 8]
copyOfRange()
方法屬於 Java Arrays
類別。
它將陣列的指定範圍複製到新建立的陣列(切片陣列)中
,並從原始陣列傳回包含指定範圍的新建立的陣列。
建立陣列切片需要 O(n) 時間,儲存元件需要 #O(n)
空間,其中 n 是結果陣列的元素數。
public static int[] copyOfRange(int[] original, int from, int to)
它會拋出以下例外:
ArrayIndexOutOfBoundsException
:如果from 小於0 或from 大於指定陣列的長度。
IllegalArgumentException
:如果參數 from 大於 to。
NullPointerException
:如果給定的陣列為空。
public class Test { public static void main(String[] args) { int[] array = {0,1,2,3,4,5,6,7,8,9}; int startIndex = 3, endIndex = 8; int[] slicedArray = getSlice(array, startIndex, endIndex + 1); System.out.println("Slice of Array: "+ Arrays.toString(slicedArray)); } public static int[] getSlice(int[] array, int startIndex, int endIndex) { int[] slicedArray = Arrays.copyOfRange(array, startIndex, endIndex); return slicedArray; } }
結果如下:
Slice of Array: [3, 4, 5, 6, 7, 8]
#透過使用下列步驟
我們可以使用Java 8 Stream 找到陣列的切片。
首先,找到 startIndex 和 endIndex 陣列。
使用 range() 方法將元素(在範圍內)轉換為原始流。
使用 map() 方法來對應指定陣列中的指定元素。
透過呼叫 toArray() 方法,將映射陣列轉換為陣列。列印切片
public class Test { public static void main(String[] args) { int[] array = {0,1,2,3,4,5,6,7,8,9}; int startIndex = 3, endIndex = 8; int[] slicedArray = getSlice(array, startIndex, endIndex + 1); System.out.println("Slice of Array: "+ Arrays.toString(slicedArray)); } public static int[] getSlice(int[] array, int startIndex, int endIndex) { //获取数组的切片并将其存储在数组 slcarray[] 中 // range() 方法将元素转换为流 // 使用 lambda 表达式获取 int 流的元素 // 使用 toArray() 方法将映射元素转换为切片数组 int[] slcarray = IntStream.range(startIndex, endIndex).map(i -> array[i]).toArray(); return slcarray; } }
結果如下:
Slice of Array: [3, 4, 5, 6, 7, 8]
以上是Java中數組切片的方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!