Javaでは配列 スライス は、指定された配列の部分配列を取得する方法です。 a[] が配列であると仮定します。これには、a[0] から a[7] までのインデックスが付けられた 8 つの要素があります。
a[] = {8、9、4、6、0、11、45、21}
ホバリングCSS
ここで、a[3] から a[6] までの配列インデックスのスライスを見つけたいとします。ここで、a[3] は startIndex、a[6] は endIndex です。したがって、次のようになります。 スライスされた配列 :
a[] = {6, 0, 11, 45}
このセクションでは、次のことを学びます Java で配列のスライスを見つける方法。
配列のスライスを検索するには、次の 3 つの方法があります。
- 要素をコピーすることで
- copyOfRange() メソッドを使用する
- Java 8 ストリームの使用
それぞれの方法について詳しく説明します。
Javaの回文
要素をコピーすることによって
これは、配列のスライスを取得するためのネイティブ メソッドです。このメソッドでは、まず、指定された配列の開始インデックスと終了インデックスを見つけます。その後、次のサイズの空の配列 (スライスされた配列) を作成します。 (endIndex - startIndex)。 指定された配列から、要素 (startIndex から) をスライスされた配列にコピーします。最後に、スライスされた配列を出力します。
上記のアプローチを実装してみましょう ジャワ 指定された配列のスライスされた配列を取得するプログラム。この番組では。プリミティブ型の配列を使用します。
SliceArrayExample1.java
世界で最高の車
import java.util.Arrays; public class SliceArrayExample1 { //creating a functiion to the slice of an array public static int[] getSlice(int[] array, int startIndex, int endIndex) { // Get the slice of the Array int[] slicedArray = new int[endIndex - startIndex]; //copying array elements from the original array to the newly created sliced array for (int i = 0; i <slicedarray.length; i++) { slicedarray[i]="array[startIndex" + i]; } returns the slice of an array return slicedarray; main() method public static void main(string args[]) from which we will find int[] 56, 78, 22, 45, 90, 67, 91, 0, 31}; start index and end denotes part original to be int startindex="3," endindex="8;" get slicedarray="getSlice(array," startindex, 1); prints system.out.println('slice array: '+arrays.tostring(slicedarray)); < pre> <p> <strong>Output:</strong> </p> <pre> Slice of Array: [22, 45, 90, 67, 91, 0] </pre> <h2>By Using the copyOfRange() Method</h2> <p>The copyOfRange() method belongs to the Java Arrays class . It copies the specified range of the array to the newly created array (slice array) and returns the newly created array that contains the specified range from the original array. It takes <strong>O(n)</strong> time to create slicing of an array and <strong>O(n)</strong> space to store elements, where n is the number of elements of the resulting array.</p> <p> <strong>Syntax:</strong> </p> <pre> public static int[] copyOfRange(int[] original, int from, int to) </pre> <p>The method parses the three parameters:</p> <ul> <tr><td>original:</td> It is an array whose slice is to find. </tr><tr><td>from:</td> It is the start index. It must lie between 0 to the length of the given array. </tr><tr><td>to:</td> It is the end index. </tr></ul> <p>It throws the following exceptions:</p> <ul> <tr><td>ArrayIndexOutOfBoundsException:</td> If from is less than 0 or from is greater than the length of the specified array. </tr><tr><td>IllegalArgumentException:</td> If the parameter from is greater than to. </tr><tr><td>NullPointerException:</td> If the given array is null. </tr></ul> <p> <strong>SliceArrayExample2.java</strong> </p> <pre> import java.util.Arrays; public class SliceArrayExample2 { //function to get slice of a primitive array in Java public static int[] slice(int[] array, int startIndex, int endIndex) { // Get the slice of the Array int[] slicedArray = Arrays.copyOfRange(array, startIndex, endIndex); // return the slice return slicedArray; } public static void main(String args[]) { //get the array, startIndex and endIndex int[] array = {11, 23, 56, 90, 111, 901, 251, 800, 843}; int startIndex = 2, endIndex = 6; //get the slice of the array int[] sliceArray = slice(array, startIndex, endIndex + 1); //prints the slice of an array System.out.println('Slice of Array: '+Arrays.toString(sliceArray)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Slice of Array: [56, 90, 111, 901, 251] </pre> <h2>By Using Java 8 Stream</h2> <p>By using the following steps, we can find the slice of an array using the Java 8 Stream.</p> <ul> <li>First, find the startIndex and endIndex array.</li> <li>Convert the elements (that are in range) into Primitive Stream using range() method.</li> <li>Using the <strong>map()</strong> method map the specified elements from the specified array.</li> <li>By invoking the <strong>toArray()</strong> method, convert the mapped array into an array.</li> <li>Print the <strong>sliced</strong> </li> </ul> <p> <strong>SliceArrayExample3.java</strong> </p> <pre> import java.util.Arrays; import java.util.stream.IntStream; public class SliceArrayExample3 { //user defined function that finds the sslice of an specified array public static int[] findSlice(int[] array, int startIndex, int endIndex) { //getting the slice of an array and storing it in array slcarray[] //the range() method converts the elements into stream //getting the elments of the int stream using lambda expression //converting the mapped elements into sliced array using the toArray() method int[] slcarray = IntStream.range(startIndex, endIndex).map(i -> array[i]).toArray(); //returns the slice of array return slcarray; } //main() method public static void main(String args[]) { //Get the array, startIndex and endIndex int[] array = {12, 45, 90, 55, 34, 100, 345, 897, 67, 123, 0, 789}; int startIndex = 5, endIndex = 10; //Get the slice of the array int[] slcarray = findSlice(array, startIndex, endIndex + 1); //Print the slice of the array System.out.println('Slice of array for the specified range is: '+Arrays.toString(slcarray)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Slice of array for the specified range is: [100, 345, 897, 67, 123, 0] </pre> <hr></slicedarray.length;>
copyOfRange() メソッドを使用する
copyOfRange() メソッドは Java Arrays クラスに属します。配列の指定された範囲を新しく作成された配列 (スライス配列) にコピーし、元の配列から指定された範囲を含む新しく作成された配列を返します。かかる の上) 配列のスライスを作成する時間と、 の上) 要素を格納するスペース。n は結果の配列の要素の数です。
構文:
public static int[] copyOfRange(int[] original, int from, int to)
このメソッドは 3 つのパラメーターを解析します。
次の例外がスローされます。
SliceArrayExample2.java
サニーデル年齢
import java.util.Arrays; public class SliceArrayExample2 { //function to get slice of a primitive array in Java public static int[] slice(int[] array, int startIndex, int endIndex) { // Get the slice of the Array int[] slicedArray = Arrays.copyOfRange(array, startIndex, endIndex); // return the slice return slicedArray; } public static void main(String args[]) { //get the array, startIndex and endIndex int[] array = {11, 23, 56, 90, 111, 901, 251, 800, 843}; int startIndex = 2, endIndex = 6; //get the slice of the array int[] sliceArray = slice(array, startIndex, endIndex + 1); //prints the slice of an array System.out.println('Slice of Array: '+Arrays.toString(sliceArray)); } }
出力:
Slice of Array: [56, 90, 111, 901, 251]
Java 8 ストリームを使用する場合
次の手順を使用すると、Java 8 ストリームを使用して配列のスライスを見つけることができます。
- まず、startIndex 配列と endIndex 配列を見つけます。
- range() メソッドを使用して、(範囲内の) 要素をプリミティブ ストリームに変換します。
- を使用して、 地図() メソッドは、指定された配列から指定された要素をマップします。
- を呼び出すことで、 toArray() メソッドで、マップされた配列を配列に変換します。
- を印刷します。 スライスされた
SliceArrayExample3.java
import java.util.Arrays; import java.util.stream.IntStream; public class SliceArrayExample3 { //user defined function that finds the sslice of an specified array public static int[] findSlice(int[] array, int startIndex, int endIndex) { //getting the slice of an array and storing it in array slcarray[] //the range() method converts the elements into stream //getting the elments of the int stream using lambda expression //converting the mapped elements into sliced array using the toArray() method int[] slcarray = IntStream.range(startIndex, endIndex).map(i -> array[i]).toArray(); //returns the slice of array return slcarray; } //main() method public static void main(String args[]) { //Get the array, startIndex and endIndex int[] array = {12, 45, 90, 55, 34, 100, 345, 897, 67, 123, 0, 789}; int startIndex = 5, endIndex = 10; //Get the slice of the array int[] slcarray = findSlice(array, startIndex, endIndex + 1); //Print the slice of the array System.out.println('Slice of array for the specified range is: '+Arrays.toString(slcarray)); } }
出力:
Slice of array for the specified range is: [100, 345, 897, 67, 123, 0]