HOWTO · Java

Java で配列のサブセットを取得する

このチュートリアルでは、Java で配列のサブセットを見つける方法を示します。

このチュートリアルでは、Java で配列のサブセットを取得するいくつかの方法を示します。

Arrays.copyOf() メソッドを使用して配列のサブセットを取得する

Arrays.copyOf() は Java Util の組み込みメソッドで、指定された配列を指定された型の別の配列にコピーします。 このメソッドは配列のサブセットを取得できますが、部分配列が最初のインデックス以外のインデックスで始まる場合は機能しません。

例:

package delftstack;

import java.util.Arrays;

public class Array_Subset {
  public static void main(String[] args) {
    String[] demo_array = new String[] {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int End_Index = 5;

    String[] Subset = Arrays.copyOf(demo_array, End_Index, String[].class);
    System.out.println(Arrays.toString(Subset));
  }
}

上記のコードは、指定された配列のサブセットを開始インデックスから指定された End_index にコピーします。

出力:

[Delftstack1, Delftstack2, Delftstack3, Delftstack4, Delftstack5]

Arrays.copyOfRange() メソッドを使用して配列のサブセットを取得する

Arrays.copyOfRange() メソッドは、指定された開始インデックスと終了インデックスを持つ配列からサブセットをコピーするために使用されます。 サブセットを別の配列にコピーします。

例:

package delftstack;

import java.util.Arrays;

public class Array_Subset {
  public static <Demo> Demo[] Array_Subset(Demo[] Array, int Begin_Index, int End_Index) {
    return Arrays.copyOfRange(Array, Begin_Index, End_Index);
  }

  public static void main(String[] args) {
    String[] Demo_Array = {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int Begin_Index = 2;
    int End_Index = 7;

    String[] Subset = Array_Subset(Demo_Array, Begin_Index, End_Index);
    System.out.println(Arrays.toString(Subset));
  }
}

出力:

[Delftstack3, Delftstack4, Delftstack5, Delftstack6, Delftstack7]

Java 8 の Stream.IntStream メソッドを使用して配列のサブセットを取得する

Java Stream を使用して、配列のサブセットを取得することもできます。 指定された範囲の間の要素のストリームを取得し、配列に入れます。

例:

package delftstack;

import java.util.Arrays;
import java.util.stream.IntStream;

public class Array_Subset {
  public static void main(String[] args) {
    String[] Demo_Arrary = {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int Begin_Index = 2;
    int End_Index = 7;

    String[] Subset = IntStream.range(Begin_Index, End_Index)
                          .mapToObj(x -> Demo_Arrary[x])
                          .toArray(String[] ::new);

    System.out.println(Arrays.toString(Subset));
  }
}

出力:

[Delftstack3, Delftstack4, Delftstack5, Delftstack6, Delftstack7]

System.arraycopy() メソッドを使用して配列のサブセットを取得する

System.arraycopy() メソッドは、指定された開始インデックスと終了インデックスを持つ配列からサブセットをコピーできます。 サブセットを別の配列にコピーします。

例:

package delftstack;

import java.util.Arrays;

public class Array_Subset {
  public static void main(String[] args) {
    String[] Demo_Array = new String[] {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int Begin_Index = 2;
    int End_Index = 7;

    String[] Subset = new String[End_Index - Begin_Index];
    System.arraycopy(Demo_Array, Begin_Index, Subset, 0, Subset.length);

    System.out.println(Arrays.toString(Subset));
  }
}

System.arraycopy() は Arrays.copyOfRange() と同様に機能します。 指定された範囲内の配列のサブセットをコピーします。

出力:

[Delftstack3, Delftstack4, Delftstack5, Delftstack6, Delftstack7]

Apache Commons Lang を使用して配列のサブセットを取得する

ArrayUtils クラスは、subarray() メソッドを使用して配列のサブセットを取得する機能を提供します。 このメソッドは、指定された範囲の要素を持つオブジェクトを返します。

例:

package delftstack;

import java.util.Arrays;
import org.apache.commons.lang3.ArrayUtils;

public class Array_Subset {
  public static void main(String[] args) {
    String[] Demo_Array = new String[] {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int Begin_Index = 2;
    int End_Index = 7;

    Object[] Subset = ArrayUtils.subarray(Demo_Array, Begin_Index, End_Index);
    System.out.println(Arrays.toString(Subset));
  }
}

出力:

[Delftstack3, Delftstack4, Delftstack5, Delftstack6, Delftstack7]

リスト変換を使用して配列のサブセットを取得する

このメソッドは、配列をリストに変換し、subList() メソッドを使用して、指定された範囲内の配列のサブセットを取得し、それを別の配列にコピーします。

例:

package delftstack;

import java.util.Arrays;

public class Array_Subset {
  public static void main(String[] args) {
    String[] Demo_Array = new String[] {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int Begin_Index = 2;
    int End_Index = 7;

    String[] Subset =
        Arrays.asList(Demo_Array).subList(Begin_Index, End_Index).toArray(new String[0]);
    System.out.println(Arrays.toString(Subset));
  }
}

出力:

[Delftstack3, Delftstack4, Delftstack5, Delftstack6, Delftstack7]

カスタム メソッドを使用して配列のサブセットを取得する

配列のサブセットを取得するメソッドを書きましょう。 for ループを使用して、指定された範囲内の配列のサブセットを取得できます。

例:

package delftstack;

import java.util.Arrays;

public class Array_Subset {
  public static void main(String[] args) {
    String[] Demo_Array = new String[] {"Delftstack1", "Delftstack2", "Delftstack3", "Delftstack4",
        "Delftstack5", "Delftstack6", "Delftstack7"};
    int Begin_Index = 2;
    int End_Index = 7;

    String[] Subset = new String[End_Index - Begin_Index];
    for (int x = 0; x < Subset.length; x++) {
      Subset[x] = Demo_Array[Begin_Index + x];
    }
    System.out.println(Arrays.toString(Subset));
  }
}

出力:

[Delftstack3, Delftstack4, Delftstack5, Delftstack6, Delftstack7]