HOWTO · Java

Java で配列をスライスする

この記事は、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