خاصية المصفوفات (Arrays) في جافا هي هيكل بيانات يُستخدم لتخزين مجموعة ثابتة الحجم من العناصر من نفس النوع. تُعتبر المصفوفات كائنات في جافا، ولها خصائص وطرق مُحددة للتعامل معها. إليك شرح مُفصّل لخاصية المصفوفات في جافا:

مفهوم المصفوفات:

  • مجموعة مُرتبة: تُخزّن المصفوفة العناصر بترتيب مُتسلسل في الذاكرة، حيث يُمكن الوصول إلى كل عنصر بواسطة فهرسه (index).
  • حجم ثابت: عند إنشاء مصفوفة، يجب تحديد حجمها، ولا يُمكن تغيير هذا الحجم لاحقًا.
  • نوع مُتجانس: يجب أن تكون جميع العناصر في المصفوفة من نفس نوع البيانات (مثل int للأعداد الصحيحة، String للنصوص، double للأعداد العشرية، إلخ).
  • الفهرسة الصفرية: يبدأ فهرس أول عنصر في المصفوفة من الصفر، يليه 1 للعنصر الثاني، وهكذا.

إنشاء المصفوفات:

يُمكن إنشاء المصفوفات في جافا بطريقتين:

  1. التصريح والتهيئة في سطر واحد:

    Java
    int[] numbers = {1, 2, 3, 4, 5}; // إنشاء مصفوفة أعداد صحيحة وتعبئتها بالقيم
    String[] names = {"Ali", "Ahmed", "Sara"}; // إنشاء مصفوفة نصوص وتعبئتها بالقيم
  2. التصريح أولاً ثم التهيئة:

    Java
    int[] numbers = new int[5]; // إنشاء مصفوفة أعداد صحيحة بحجم 5 (جميع العناصر ستكون قيمتها 0 افتراضيًا)
    numbers[0] = 10; // تعيين قيمة للعنصر الأول
    numbers[1] = 20; // تعيين قيمة للعنصر الثاني
    // ... وهكذا

الوصول إلى عناصر المصفوفة:

يتم الوصول إلى عناصر المصفوفة باستخدام الفهرس الخاص بها داخل أقواس مربعة []:

Java
int[] numbers = {10, 20, 30};
int firstNumber = numbers[0]; // firstNumber سيحتوي على القيمة 10
int secondNumber = numbers[1]; // secondNumber سيحتوي على القيمة 20

طول المصفوفة:

يُمكن الحصول على طول المصفوفة (عدد عناصرها) باستخدام الخاصية length:

Java
int[] numbers = {1, 2, 3, 4, 5};
int arrayLength = numbers.length; // arrayLength سيحتوي على القيمة 5

التعامل مع المصفوفات:

توفر جافا بعض الطرق المُفيدة للتعامل مع المصفوفات، مثل:

  • الحلقات التكرارية: تُستخدم الحلقات for و for-each للمرور على جميع عناصر المصفوفة وتنفيذ عمليات عليها.

    Java
    int[] numbers = {1, 2, 3, 4, 5};
    for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
    }

    for (int number : numbers) { // حلقة for-each أبسط للمرور على جميع العناصر
    System.out.println(number);
    }
  • الصنف Arrays: يوفر الصنف java.util.Arrays طرقًا مُفيدة للتعامل مع المصفوفات، مثل:

    • Arrays.sort(): لترتيب عناصر المصفوفة.
    • Arrays.binarySearch(): للبحث عن عنصر في مصفوفة مُرتبة.
    • Arrays.equals(): لمُقارنة مصفوفتين.
    • Arrays.copyOf(): لنسخ جزء من مصفوفة أو مصفوفة كاملة.

مثال على استخدام الصنف Arrays:

Java
import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int[] numbers = {5, 2, 8, 1, 9};
Arrays.sort(numbers); // ترتيب المصفوفة تصاعديًا
System.out.println(Arrays.toString(numbers)); // طباعة المصفوفة بعد الترتيب: [1, 2, 5, 8, 9]

int index = Arrays.binarySearch(numbers, 5); // البحث عن العنصر 5
System.out.println("Index of 5: " + index); // طباعة فهرس العنصر 5: 2
}
}

مزايا المصفوفات:

  • الوصول السريع للعناصر: يُمكن الوصول إلى أي عنصر في المصفوفة بوقت ثابت باستخدام فهرسه.
  • بنية بيانات بسيطة وفعّالة: تُعتبر المصفوفات من أبسط وأسرع هياكل البيانات.

عيوب المصفوفات:

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

باختصار، تُعتبر المصفوفات أداة قوية وفعّالة لتخزين ومعالجة مجموعات البيانات المُتجانسة ذات الحجم الثابت في جافا. ومع ذلك، يجب الانتباه إلى محدودية حجمها الثابت عند استخدامها. إذا كنت بحاجة إلى هيكل بيانات يُمكن تغيير حجمه ديناميكيًا، فمن الأفضل استخدام هياكل بيانات أخرى مثل ArrayList.