logo

Masīvu sagriešana Java

Java valodā masīvs sagriešana ir veids, kā iegūt dotā masīva apakšmasu. Pieņemsim, ka a[] ir masīvs. Tajā ir 8 elementi, kas indeksēti no a[0] līdz a[7].

a[] = {8, 9, 4, 6, 0, 11, 45, 21}

cik pilsētu Amerikas Savienotajās Valstīs

Tagad mēs vēlamies atrast masīva indeksa daļu no a[3] līdz a[6]. Kur a[3] ir sākuma indekss un a[6] ir beigu indekss. Tāpēc mēs iegūstam sekojošo sagriezts masīvs :

a[] = {6, 0, 11, 45}

Šajā sadaļā mēs uzzināsim kā Java atrast masīva daļu.

Ir trīs veidi, kā atrast masīva daļu:

  • Kopējot elementus
  • Izmantojot metodi copyOfRange()
  • Izmantojot Java 8 Stream

Apspriedīsim katru metodi sīkāk.

uzdevumu pārvaldnieks operētājsistēmai Linux

Kopējot elementus

Tā ir vietējā metode masīva daļas iegūšanai. Šajā metodē, pirmkārt, mēs atrodam dotā masīva sākuma un beigu indeksu. Pēc tam mēs izveidojam tukšu lieluma masīvu (sagrieztu masīvu). (endIndex - startIndex). No dotā masīva kopējiet elementus (no startIndex) uz sagriezto masīvu. Beidzot izdrukājiet sagriezto masīvu.

Ieviesīsim iepriekš minēto pieeju a Java programma, lai iegūtu sagrieztu dotā masīva masīvu. Šajā programmā. mēs izmantosim primitīvu tipu masīvu.

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(&apos;Slice of Array: &apos;+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 -&gt; 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(&apos;Slice of array for the specified range is: &apos;+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;>

Izmantojot metodi copyOfRange()

CopyOfRange() metode pieder Java Arrays klasei. Tas kopē norādīto masīva diapazonu jaunizveidotajā masīvā (šķēluma masīvā) un atgriež jaunizveidoto masīvu, kas satur norādīto diapazonu no sākotnējā masīva. Tas prasa O(n) laiks izveidot masīva sagriešanu un O(n) telpa elementu glabāšanai, kur n ir iegūtā masīva elementu skaits.

pavasara st

Sintakse:

 public static int[] copyOfRange(int[] original, int from, int to) 

Metode parsē trīs parametrus:

bash elifs
    oriģināls:Tas ir masīvs, kura šķēle ir jāatrod.no:Tas ir sākuma indekss. Tam jāatrodas no 0 līdz dotā masīva garumam.uz:Tas ir beigu indekss.

Tas rada šādus izņēmumus:

    ArrayIndexOutOfBoundsException:Ja no ir mazāks par 0 vai no ir lielāks par norādītā masīva garumu.IllegalArgumentException:Ja parametrs no ir lielāks par līdz.NullPointerException:Ja dotais masīvs ir nulle.

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(&apos;Slice of Array: &apos;+Arrays.toString(sliceArray)); } } 

Izvade:

 Slice of Array: [56, 90, 111, 901, 251] 

Izmantojot Java 8 Stream

Izmantojot šādas darbības, mēs varam atrast masīva daļu, izmantojot Java 8 straumi.

  • Vispirms atrodiet startIndex un endIndex masīvu.
  • Pārveidojiet elementus (kas atrodas diapazonā) primitīvā straumē, izmantojot diapazona () metodi.
  • Izmantojot karte () metode kartē norādītos elementus no norādītā masīva.
  • Izsaucot toArray() metodi, pārvērš kartēto masīvu masīvā.
  • Izdrukājiet šķēlēs

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 -&gt; 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(&apos;Slice of array for the specified range is: &apos;+Arrays.toString(slcarray)); } } 

Izvade:

 Slice of array for the specified range is: [100, 345, 897, 67, 123, 0]