Arrays.sort() في جافا
يتم استخدام طريقة Arrays.sort() في Java لفرز عناصر المصفوفة.
- يوفر خيارات مرنة لفرز المصفوفات الفرعية بأكملها أو حتى الكائنات المخصصة باستخدام المقارنات.
- يمكن فرز كل من المصفوفات البدائية (int char وما إلى ذلك) ومصفوفات الكائنات (سلسلة صحيحة وما إلى ذلك).
مثال: فرز الأعداد الصحيحة ومصفوفات الأحرف بترتيب تصاعدي
Java import java.util.Arrays ; class Geeks { public static void main ( String [] args ) { // Integer array int [] arr1 = { 2 - 1 3 4 }; // Character array char [] arr2 = { 'b' 'a' 'c' 'b' }; // Sorting arrays in ascending order Arrays . sort ( arr1 ); Arrays . sort ( arr2 ); // Print sorted arrays System . out . println ( Arrays . toString ( arr1 )); System . out . println ( Arrays . toString ( arr2 )); } }
الإخراج
[-1 2 3 4] [a b b c]
توضيح:
- تقوم الدالة Arrays.sort() بإعادة ترتيب العناصر بترتيب تصاعدي.
- لا تتم إزالة التكرارات.
- لا يمكن للصفائف البدائية استخدام مقارنات مخصصة.
بناء جملة طريقة Arrays.sort()
1. لفرز المصفوفة بأكملها
Arrays.sort();
2. لفرز مجموعة فرعية
فرز الفراغ الثابت العام (int[] arr int from_Index int to_Index) ؛
حدود:
- وصول : المصفوفة المراد فرزها.
- من_الفهرس: فهرس العنصر الأول (الشامل) المراد فرزه.
- to_Index : فهرس العنصر الأخير (حصريا) المراد فرزه.
- نوع الإرجاع: باطلة (هذه الطريقة لا تُرجع أي شيء).
ملحوظة:
- لا يقوم Arrays.sort() بإزالة التكرارات؛ فهو يعيد ترتيب العناصر فقط.
- لا يمكن للأنواع البدائية استخدام مقارنات مخصصة؛ يتم الفرز بالترتيب الطبيعي (التصاعدي).
مثال: فرز المصفوفة الفرعية
يمكنك فرز جزء من المصفوفة عن طريق تحديد فهارس البداية (الشاملة) والنهاية (الحصرية).
Java import java.util.Arrays ; public class Geeks { public static void main ( String [] args ){ int [] arr = { 2 - 1 4 3 }; // Sort elements from index 1 to 3 Arrays . sort ( arr 1 4 ); // Print array after sorting subarray System . out . println ( Arrays . toString ( arr )); } }
الإخراج
[2 -1 3 4]
توضيح: يتم فرز العناصر الموجودة في الفهارس 1 و2 و3 فقط؛ يبقى العنصر الموجود في الفهرس 0 دون تغيير.
الترتيب التنازلي
لفرز مصفوفة بترتيب تنازلي يمكننا استخدام طريقة Arrays.sort() مع Collections.reverseOrder() كمقارنة.
Java import java.util.Arrays ; import java.util.Collections ; public class Geeks { public static void main ( String [] args ) { // Integer array Integer [] arr = { 2 - 1 3 4 }; Arrays . sort ( arr Collections . reverseOrder ()); System . out . println ( Arrays . toString ( arr )); // String array String [] str = { 'Hii' 'Vishnu' 'chauhan' }; Arrays . sort ( str Collections . reverseOrder ()); System . out . println ( Arrays . toString ( str )); } }
الإخراج
[4 3 2 -1] [chauhan Vishnu Hii]
توضيح:
- يعمل على صفائف الكائنات فقط؛ الأنواع البدائية (int) لا يمكنها استخدام المقارنات.
- بالنسبة للسلاسل النصية، يتم فرزها معجميًا من Z -> A.
فرز مخصص مع المقارنة
يمكننا فرز مجموعة من الكائنات عن طريق تحديد منطق الفرز المخصص بمساعدة استخدام واجهة المقارنة .
Java import java.util.* ; // Custom class class Student { int roll ; String name ; String address ; Student ( int roll String name String address ){ this . roll = roll ; this . name = name ; this . address = address ; } // Print student details public String toString () { return roll + ' ' + name + ' ' + address ; } } // Comparator to sort by roll number class SortByRoll implements Comparator < Student > { public int compare ( Student s1 Student s2 ){ return s1 . roll - s2 . roll ; } } class Geeks { public static void main ( String [] args ){ Student [] students = { new Student ( 1 'Ram' 'MP' ) new Student ( 2 'Shyam' 'UP' ) new Student ( 3 'Hari' 'Delhi' ) }; // Sort using custom comparator Arrays . sort ( students new SortByRoll ()); // Print sorted students for ( Student s : students ) System . out . println ( s ); } }
الإخراج
1 Ram MP 2 Shyam UP 3 Hari Delhi
توضيح:
- يسمح المقارن بمنطق الفرز المخصص دون تعديل الفئة.
- هنا يتم فرز الطلاب حسب رقم الجلوس.
الفرز الطبيعي مع واجهة قابلة للمقارنة
في المثال أدناه، نقوم بفرز مجموعة من كائنات الطالب بناءً على أسمائها أبجديًا.
Java import java.util.Arrays ; class Student implements Comparable < Student > { int r ; String n ; String a ; // Constructor public Student ( int r String n String a ){ this . r = r ; this . n = n ; this . a = a ; } // compareTo method to sort by name public int compareTo ( Student o ){ return this . n . compareTo ( o . n ); } // toString() method to print Student details public String toString () { return this . r + ' ' + this . n + ' ' + this . a ; } } public class Geeks { public static void main ( String [] args ){ Student [] s = { new Student ( 1 'Ram' 'UP' ) new Student ( 2 'Shyam' 'MP' ) new Student ( 3 'Hari' 'Bihar' ) }; // Sorting students by name in alphabetical order Arrays . sort ( s ); for ( Student student : s ) System . out . println ( student ); } }
الإخراج
3 Hari Bihar 1 Ram UP 2 Shyam MP
توضيح:
- في هذا المثال نستخدم واجهة قابلة للمقارنة لتحديد الترتيب الطبيعي لكائنات الطالب.
- من خلال تنفيذ الطريقة، نحدد كيفية مقارنة كائنين للطالب عن طريق تمكين الفرز بناءً على اسم الطالب.
هذا يسمح لنا باستخدام طريقة Arrays.sort() مباشرة على مجموعة من كائنات الطالب لفرزها بالترتيب وهنا لا نحتاج إلى مقارنة منفصلة.
إنشاء اختبار