首頁  >  文章  >  Java  >  Java中數組切片的方法有哪些

Java中數組切片的方法有哪些

王林
王林轉載
2023-05-20 18:22:193047瀏覽

1.問題

陣列切片是一種取得給定陣列的子陣列的方法。假設,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}

有以下三種方法可以找到陣列的切片:

  1. 透過複製元素

  2. 透過使用copyOfRange() 方法

  3. 使用Java 8 流

2.方法

1)透過複製元素

  • #首先,我們找到給定陣列的開始和結束索引。

  • 之後,我們建立一個大小為 (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]

2)透過使用copyOfRange() 方法

  • 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]

3)使用Java 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中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除