Java で配列をスライスする

Shiv Yadav 2023年10月12日
  1. Java での配列スライシング
  2. Java で要素を複製して配列をスライスする
  3. Java で copyOfRange() メソッドを使用して配列をスライスする
  4. Java8 ストリームを使用して配列をスライスする
Java で配列をスライスする

この記事は、Java で配列をサブ配列にスライスするのに役立ちます。

Java での配列スライシング

配列スライシングは、より広範な配列からサブ配列を抽出するための Java 技術です。

k[] が配列であると仮定します。k[0] から k[6] までの番号が付けられた 7つのコンポーネントがあります。

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 ファイルとして保存し、JavaIDE で実行します。

出力:

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 ファイルとして保存し、JavaIDE で実行します。

出力:

Java 配列スプライス-出力 2

Java8 ストリームを使用して配列をスライスする

以下の手順に従って、Java8 ストリームを使用してアレイのスライスを検出できます。

  • 最初に開始インデックス配列と終了インデックス配列を見つけます。
  • 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 ファイルとして保存し、JavaIDE で実行します。

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