0Pricing
Java Academy · درس

Arrays.sort والفرز

افرزوا مصفوفات الأنواع البدائية والكائنات

Arrays.sort والفرز درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

سبب وجود فئة الأدوات

المصفوفات في Java كائنات، لكنها تحتوي على عدد قليل جدًا من الدوال المضمنة. وتسُد الفئة java.util.Arrays هذه الفجوة بتوفير دوال مساعدة static لفرز المصفوفات والبحث فيها ومقارنتها ونسخها وطباعتها.

  • استوردها باستخدام import java.util.Arrays;
  • كل دوالها هي static، لذا تستدعيها على الفئة نفسها: Arrays.sort(...)

فرز مصفوفة من الأنواع البدائية

تفرز Arrays.sort(int[]) المصفوفة في موضعها باستخدام خوارزمية فرز سريعة ثنائية المحور. ولا تُرجع قيمة؛ بل تعيد ترتيب المصفوفة الأصلية.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {5, 2, 8, 1, 9, 3};
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
    }
}

فرز الأنواع البدائية الأخرى

تتوفر نسخ محمّلة لكل نوع بدائي: double[] وlong[] وchar[] وغير ذلك. وتفرز جميعها تصاعديًا.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        double[] prices = {3.5, 1.2, 9.9, 0.5};
        Arrays.sort(prices);
        System.out.println(Arrays.toString(prices));
    }
}

فرز نطاق

يمكنك فرز جزء فقط من المصفوفة باستخدام Arrays.sort(array, fromIndex, toIndex). ويكون النطاق شاملًا لـ fromIndex وغير شامل لـ toIndex.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {5, 2, 8, 1, 9, 3};
        Arrays.sort(nums, 1, 4);
        System.out.println(Arrays.toString(nums));
    }
}

فرز مصفوفات الكائنات

بالنسبة إلى مصفوفات الكائنات مثل String[]، تستخدم Arrays.sort الترتيب الطبيعي للعناصر، أي تطبيق Comparable الخاص بها. وتُفرز السلاسل معجميًا.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] names = {"Charlie", "Alice", "Bob"};
        Arrays.sort(names);
        System.out.println(Arrays.toString(names));
    }
}

الفرز باستخدام Comparator

لتجاوز الترتيب الطبيعي، مرّر Comparator. إذ يفرز Comparator.reverseOrder() تنازليًا. ولا يعمل هذا إلا مع مصفوفات الكائنات، وليس مع المصفوفات من الأنواع البدائية.

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        String[] names = {"Charlie", "Alice", "Bob"};
        Arrays.sort(names, Comparator.reverseOrder());
        System.out.println(Arrays.toString(names));
    }
}

Comparator حسب الطول

يمكن لـ Comparator المقارنة وفق أي خاصية. إذ يفرز Comparator.comparingInt(String::length) السلاسل من الأقصر إلى الأطول.

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        String[] words = {"banana", "fig", "apple"};
        Arrays.sort(words, Comparator.comparingInt(String::length));
        System.out.println(Arrays.toString(words));
    }
}

الاستقرار

يكون فرز مصفوفات الكائنات مستقرًا؛ إذ تحتفظ العناصر المتساوية بترتيبها النسبي الأصلي. ولا يُضمن استقرار فرز الأنواع البدائية، لكن القيم المتساوية في الأنواع البدائية لا يمكن تمييزها، لذلك لا يهم الأمر.

الفرز المتوازي

بالنسبة إلى المصفوفات الكبيرة جدًا، تقسّم Arrays.parallelSort العمل على عدة أنوية لوحدة المعالجة المركزية. وواجهة الاستخدام مطابقة لـ sort؛ والنتيجة نفسها، لكن التنفيذ يكون أسرع مع البيانات الكبيرة.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] nums = {7, 3, 9, 1, 5, 2, 8, 4};
        Arrays.parallelSort(nums);
        System.out.println(Arrays.toString(nums));
    }
}

مشكلة شائعة

تُرجع Arrays.sort القيمة void. لذلك لن يتم ترجمة سطر مثل int[] sorted = Arrays.sort(nums);. افرز المصفوفة أولًا، ثم استخدم المتغير نفسه.

الفرز ثم الطباعة

التسلسل المعتاد هو: فرز المصفوفة في موضعها، ثم طباعتها باستخدام Arrays.toString للتحقق من النتيجة.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] scores = {88, 72, 95, 60, 81};
        Arrays.sort(scores);
        System.out.println("Lowest:  " + scores[0]);
        System.out.println("Highest: " + scores[scores.length - 1]);
        System.out.println(Arrays.toString(scores));
    }
}

تحقق سريع

اختبر فهمك للفرز.

مراجعة

لقد تعلمت فرز المصفوفات باستخدام فئة الأدوات Arrays.

  • تفرز Arrays.sort(arr) الأنواع البدائية أو الكائنات في موضعها، وبترتيب تصاعدي.
  • تفرز النسخة التي تستقبل نطاقًا sort(arr, from, to) جزءًا من المصفوفة.
  • تقبل مصفوفات الكائنات Comparator لتحديد ترتيب مخصص.
  • تسرّع parallelSort فرز المصفوفات الكبيرة.

الأسئلة الشائعة

هل درس «Arrays.sort والفرز» مجاني؟

نعم — نص درس «Arrays.sort والفرز» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «Arrays.sort والفرز»؟

افرزوا مصفوفات الأنواع البدائية والكائنات تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «Arrays.sort والفرز»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Arrays.sort والفرز
  2. Arrays.binarySearch
  3. Arrays.fill وcopyOf
  4. الدالتان Arrays.equals وtoString
← العودة إلى Java Academy