logo

تقطيع المصفوفة في جافا

في جافا، المصفوفة تقطيع هي طريقة للحصول على مصفوفة فرعية من المصفوفة المحددة. لنفترض أن [] عبارة عن مصفوفة. يحتوي على 8 عناصر مفهرسة من a[0] إلى a[7].

أ[] = {8، 9، 4، 6، 0، 11، 45، 21}

التحيز والتباين

الآن، نريد العثور على شريحة من فهرس المصفوفة من a[3] إلى a[6]. حيث a[3] هو مؤشر البداية و[6] هو مؤشر النهاية. لذلك نحصل على ما يلي مصفوفة مقطعة :

أ[] = {6، 0، 11، 45}

في هذا القسم سوف نتعلم كيفية العثور على شريحة من مجموعة في جافا.

توجد الطرق الثلاث التالية للعثور على شريحة من مصفوفة:

  • عن طريق نسخ العناصر
  • باستخدام طريقة CopyOfRange()
  • باستخدام جافا 8 ستريم

دعونا نناقش كل طريقة بالتفصيل.

جافا ملف مفتوح

عن طريق نسخ العناصر

إنها طريقة أصلية للحصول على شريحة من المصفوفة. في هذه الطريقة، نقوم أولاً بالعثور على فهرس البداية والنهاية للمصفوفة المحددة. بعد ذلك، نقوم بإنشاء مصفوفة فارغة (مصفوفة شرائح) من الحجم (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(&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;>

باستخدام طريقة CopyOfRange()

تنتمي طريقة CopyOfRange () إلى فئة Java Arrays. يقوم بنسخ النطاق المحدد للصفيف إلى الصفيف الذي تم إنشاؤه حديثًا (صفيف الشريحة) وإرجاع الصفيف الذي تم إنشاؤه حديثًا والذي يحتوي على النطاق المحدد من الصفيف الأصلي. فإنه يأخذ على) الوقت لإنشاء تشريح مجموعة و على) مساحة لتخزين العناصر، حيث n هو عدد عناصر المصفوفة الناتجة.

قائمة السهام

بناء الجملة:

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

تقوم الطريقة بتحليل المعلمات الثلاثة:

    إبداعي:إنها مصفوفة يجب العثور على شريحتها.من:إنه مؤشر البداية. يجب أن يقع بين 0 وطول المصفوفة المحددة.ل:وهو مؤشر النهاية.

يطرح الاستثناءات التالية:

    مؤشر مجموعة خارج الحدود استثناء:إذا كان from أقل من 0 أو from أكبر من طول المصفوفة المحددة.غير الشرعيين استثناء حجة:إذا كانت المعلمة from أكبر من to.استثناء NullPointer:إذا كانت المصفوفة المحددة فارغة.

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)); } } 

انتاج:

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

باستخدام Java 8 Stream

باستخدام الخطوات التالية، يمكننا العثور على شريحة المصفوفة باستخدام Java 8 Stream.

  • أولاً، ابحث عن مصفوفة startIndex وendIndex.
  • قم بتحويل العناصر (الموجودة في النطاق) إلى التدفق البدائي باستخدام طريقة range().
  • باستخدام خريطة() تقوم الطريقة بتعيين العناصر المحددة من المصفوفة المحددة.
  • وذلك بالاستدعاء لمجموعة() الطريقة، قم بتحويل المصفوفة المعينة إلى مصفوفة.
  • طباعة مقطع إلى شرائح

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)); } } 

انتاج:

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