المصفوفات بتنسيق Java

⚡ ملخص ذكي

المصفوفات بتنسيق Java هي حاويات ثابتة الحجم تعتمد على الفهرسة، وتخزن عناصر من نوع بيانات واحد في ذاكرة متجاورة، مما يوفر وصولاً ثابتاً في الوقت، وفحصاً مدمجاً للحدود، وحقل طول يجعلها الأساس لمعظم مجموعات المكتبات القياسية.

  • 📦 الحجم الثابت: تحتوي المصفوفة على عدد محدد من العناصر من نوع واحد.
  • 🔢 فهرس يبدأ من الصفر: تتراوح العناصر من 0 إلى الطول ناقص واحد.
  • 🧩 نوعين: Java يحتوي على مصفوفات أحادية البعد ومتعددة الأبعاد.
  • 🛠️ ثلاث خطوات: يتم تعريف كل مصفوفة وإنشاؤها باستخدام newوتمت تهيئتها.
  • 🛡️ التحقق من الحدود: رميات JVM ArrayIndexOutOfBoundsException بعد الخانة الأخيرة.
  • ↩️ بالإشارة إلى: التغييرات التي تُجرى على العناصر داخل الدالة تبقى محفوظة للمستدعي.
  • 📏 حقل الطول: كل مصفوفة تعرض length لضمان التكرار الآمن.

المصفوفات بتنسيق Java

ما هو Java مجموعة مصفوفة؟

A Java مجموعة هي بنية ذات حجم ثابت تخزن عناصر من نوع بيانات واحد في ذاكرة متجاورة. يتم الوصول إلى كل عنصر بواسطة فهرس يبدأ من الصفر، لذا فإن العنصر الأول يقع في 0 والأخير في length - 1ترث المصفوفات من Object وتنفيذها Serializable و Cloneableويمكنها أن تحتوي على عناصر أولية أو مراجع كائنات.

تُستبدل المصفوفات بسلاسل طويلة من المتغيرات المرقمة. لنفترض وجود ستة أعداد صحيحة مستقلة:

x0 = 0;
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
x5 = 5;

توجد نفس القيم الست في مصفوفة واحدة طولها ستة:

x[0] = 0;
x[1] = 1;
x[2] = 2;
x[3] = 3;
x[4] = 4;
x[5] = 5;

A حلقة يمكن للمتغير أن يتحكم في الفهرس الموجود بين قوسين، لذا فإن ثلاثة أسطر تعالج كل عنصر بدلاً من ست نسخ:

for (int count = 0; count < 5; count++) {
    System.out.println(x[count]);
}

أنواع المصفوفات في Java

Java تأتي المصفوفات في شكلين:

  1. مصفوفة أحادية البعد: قائمة مسطحة من العناصر.
  2. مصفوفة متعددة الأبعاد: مجموعة من المصفوفات، تُستخدم للشبكات والمصفوفات.

متغيرات المصفوفة: التصريح عنها، وإنشاؤها، وتهيئتها

استخدام المصفوفة هو ثلاث خطوات عملية: أعلن، أنشئ باستخدام newثم قم بالتهيئة.

1) قم بتعريف المصفوفة

بناء الجملة:

<elementType>[] <arrayName>;

or (النموذج القديم على نمط C، لا يزال صالحًا):

<elementType> <arrayName>[];

على سبيل المثال:

int[] intArray;   // canonical form: brackets on the type
int intArray2[];  // legacy C-style form, discouraged in new code

2) إنشاء المصفوفة

بناء الجملة:

arrayName = new dataType[size];

على سبيل المثال:

intArray = new int[10]; // defines that intArray will store 10 integer values

الإعلان والبناء معًا:

int[] intArray = new int[10];

3) تهيئة المصفوفة

intArray[0] = 1; // assigns 1 to the first element (index 0)
intArray[1] = 2; // assigns 2 to the second element (index 1)

قم بالإعلان والتهيئة في خطوة واحدة باستخدام مصفوفة حرفية:

int[] intArray = {1, 2, 3, 4};
// initialises an integer array of length 4 where the first element is 1,
// the second element is 2, and so on.

أول برنامج للمصفوفات في Java

الخطوة 1) انسخ الكود التالي إلى محرر النصوص:

class ArrayDemo {
    public static void main(String args[]) {
        int array[] = new int[7];

        for (int count = 0; count < 7; count++) {
            array[count] = count + 1;
        }

        for (int count = 0; count < 7; count++) {
            System.out.println("array[" + count + "] = " + array[count]);
        }

        // System.out.println("Length of Array  =  " + array.length);
        // array[8] = 10;
    }
}

الخطوة 2) احفظ الكود، ثم قم بتجميعه وتشغيله. لاحظ الناتج.

الناتج المتوقع:

array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5
array[5] = 6
array[6] = 7

الخطوة 3) If x هو مرجع للمصفوفة، x.length يُعيد عدد خاناته. قم بإلغاء التعليق على السطر الأول المُعلّق وأعد تشغيل البرنامج:

Length of Array  =  7

الخطوة 4) على عكس ج، Java يُجري فحصًا لحدود المصفوفة عند كل عملية وصول إليها. قم بإلغاء التعليق على السطر الثاني المُعلّق وأعد تشغيل البرنامج:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
        at ArrayDemo.main(ArrayDemo.java:11)
Command exited with non-zero status 1

الخطوة 5) رميات JVM ArrayIndexOutOfBoundsExceptionفي لغة C، سيؤدي الوصول نفسه إلى إرجاع بيانات غير صالحة من الذاكرة المجاورة بدلاً من الفشل.

Java المصفوفة: تمرير بالمرجع

يتم تمرير المصفوفات إلى الدوال عن طريق المرجع. تتلقى الدالة نسخة من المرجع، لذا فإن التغييرات التي تُجرى على العناصر داخل الدالة تكون مرئية للمستدعي.

مثال: يتم تمرير المصفوفات بالمرجع.

الخطوة 1) انسخ الكود التالي إلى محرر النصوص:

class ArrayDemo {
    public static void passByReference(String a[]) {
        a[0] = "Changed";
    }

    public static void main(String args[]) {
        String[] b = {"Apple", "Mango", "Orange"};
        System.out.println("Before Function Call    " + b[0]);
        ArrayDemo.passByReference(b);
        System.out.println("After Function Call    " + b[0]);
    }
}

الخطوة 2) احفظ الكود، ثم قم بتجميعه وتشغيله. لاحظ الناتج.

الناتج المتوقع:

Before Function Call    Apple
After Function Call    Changed

المصفوفات متعددة الأبعاد في Java

المصفوفات متعددة الأبعاد هي مصفوفات من المصفوفات. أضف مجموعة أخرى من الأقواس المربعة لكل بُعد. لإنشاء شبكة أعداد صحيحة ثنائية الأبعاد بأربعة صفوف وخمسة أعمدة:

int[][] twoD = new int[4][5];

يكفي تحديد البُعد الأول (الأيسر) مُسبقًا. أما الأبعاد المتبقية، فيمكن تحديدها بشكل منفصل، ويمكن أن يكون لكل صف طوله الخاص، مما يجعل Java المصفوفات ثنائية الأبعاد صحيحة المصفوفات غير المنتظمة.

على سبيل المثال:

public class Guru99 {
    public static void main(String[] args) {
        // Create a 2-dimensional array with 4 rows and 4 columns.
        int[][] twoD = new int[4][4];

        // Assign three elements to it.
        twoD[0][0] = 1;
        twoD[1][1] = 2;
        twoD[3][2] = 3;

        System.out.print(twoD[0][0] + " ");
    }
}

الناتج المتوقع:

1

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

A Java المصفوفة عبارة عن حاوية ذات حجم ثابت تخزن عناصر من نوع بيانات واحد. يتم الوصول إلى كل عنصر بواسطة فهرس يبدأ من الصفر، وتُظهر كل مصفوفة حقل طول يحتوي على عدد الخانات.

قم بتعريف المصفوفة `arr` باستخدام `int[] arr`، ثم أنشئ مصفوفة جديدة `int[size]` باستخدام `new int[size]`، ثم قم بتعيين القيم باستخدام الفهرس. ولتنفيذ كل هذه الخطوات في سطر واحد، استخدم قيمة حرفية مثل `int[] arr = {1, 2, 3, 4}`.

Java يدعم هذا البرنامج المصفوفات أحادية البعد ومتعددة الأبعاد. المصفوفة أحادية البعد هي قائمة مسطحة، أما المصفوفة متعددة الأبعاد فهي مصفوفة من المصفوفات تُستخدم للجداول والشبكات والمصفوفات.

استخدم حقل الطول، على سبيل المثال arr.length. يُعيد هذا الحقل عدد الخانات ويعمل مع أي نوع من أنواع المصفوفات. على عكس السلاسل النصية، تُعرّف المصفوفات الطول كحقل، وليس كاستدعاء دالة.

يقوم جهاز JVM بفحص حدود كل عملية وصول إلى المصفوفة. قراءة أو كتابة فهرس أقل من الصفر أو يساوي أو يزيد عن طول المصفوفة يؤدي إلى ظهور استثناء ArrayIndexOutOfBoundsException، مما يمنع أخطاء تلف الذاكرة التي تعاني منها لغات C و C++.

Java تُمرر الوسائط بالقيمة، ولكن بالنسبة للمصفوفات، تكون هذه القيمة نسخة من المرجع. يعمل الأسلوب على نفس المصفوفة الأساسية، لذا فإن تغييرات العناصر داخل الأسلوب تكون مرئية للمستدعي.

تتعرف مساعدات البرمجة القائمة على التعلم الآلي على نمط التصريح والإنشاء والتهيئة، وتُكمل القيم الحرفية أو الحلقات. كما أنها تُشير إلى أخطاء الإزاحة الشائعة التي قد تُؤدي إلى ظهور استثناء ArrayIndexOutOfBoundsException أثناء التشغيل.

نعم. يقوم GitHub Copilot بإنشاء تعريفات المصفوفات، والحلقات، واستدعاءات Arrays.sort، وعمليات البحث في المصفوفات ثنائية الأبعاد من تعليق بلغة بسيطة. Revقم بمراجعة الحدود المُولّدة قبل تشغيلها على بيانات الإنتاج.

تلخيص هذه التدوينة بـ: