الانتقال إلى المحتوى الرئيسي
الوحدة 4 · الدرس 2 من 28/14 في الدورة~15 min
دروس الوحدة (2/2)

المجموعات وArrayList

المصفوفات التقليدية في Java لها حجم ثابت محدد في وقت الإنشاء. للعمل مع قوائم البيانات التي يمكن أن يختلف حجمها ديناميكيًا، توفر Java Java Collections Framework. الفئة الأكثر استخدامًا هي ArrayList.

ArrayList الفئة والأسماء العامة

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

لاستخدام ArrayList، يجب علينا استيراده في بداية الملف من java.util.ArrayList.

التصريح والتجسيد:

Java
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

الطرق الأساسية

فيما يلي العمليات الأساسية على ArrayList:

  1. add(element): إضافة عنصر إلى نهاية القائمة.
  2. get(index): إرجاع العنصر في الفهرس المحدد (0-مفهرس).
  3. size(): إرجاع عدد العناصر الموجودة حاليًا في القائمة.
  4. remove(index): إزالة العنصر الموجود في الفهرس المحدد.
Java
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"

التكرار على قائمة (لكل)

تعد حلقة for-each البنية المثالية للتكرار عبر جميع عناصر المجموعة:

Java
for (String item : shoppingList) {
    System.out.println(item);
}

Array vs ArrayList: الذاكرة والأداء

على الرغم من أن ArrayList أكثر مرونة من المصفوفة الثابتة، إلا أنها تأتي مع مقايضات في الأداء والذاكرة:

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

Autoboxing وUnboxing

نظرًا لأن ArrayList يمكنه الاحتفاظ بالكائنات فقط، تقوم Java تلقائيًا بإجراء التحويلات بين الأنواع الأولية وفئات التغليف الخاصة بها:

  • Autoboxing: التحويل التلقائي من نوع بدائي إلى فئة مجمعة. على سبيل المثال، عندما تكتب numbers.add(42)، تقوم Java تلقائيًا بتحويل 42 (int) إلى Integer.valueOf(42) (عدد صحيح).
  • Unboxing: التحويل التلقائي من فئة مجمعة إلى نوع بدائي. على سبيل المثال، عند تنفيذ int num = numbers.get(0)، تقوم Java داخليًا بتحويل Integer إلى int.

جربه بنفسك

تمرين#java.m4.l2.e1
المحاولات: 0جارٍ التحميل…

قم باستيراد ArrayList، وقم بإعلان ArrayList لأسماء السلاسل المسماة. أضف أليس وبوب إلى القائمة، ثم اطبع حجمهما باستخدام طريقة size().

جارٍ تحميل المحرر…
إظهار التلميح

قم بتضمين "import java.util.ArrayList;" في الأعلى. أنشئ القائمة باستخدام `ArrayList<String>names = new ArrayList<>();`، وأضف العناصر، واطبع حجمها باستخدام`names.size()`.

الحل متاح بعد 3 من المحاولات

تمرين#java.m4.l2.e2
المحاولات: 0جارٍ التحميل…

قم بتعريف قائمة ArrayList للأرقام الصحيحة، وأضف الرقم 42، ثم قم بطباعته عن طريق استعادته في الفهرس 0 باستخدام get().

جارٍ تحميل المحرر…
إظهار التلميح

استخدم `ArrayList<Integer> number = new ArrayList<>();` (مع فئة غلاف Integer) وقم بطباعته باستخدام `System.out.println(numbers.get(0));`.

الحل متاح بعد 3 من المحاولات

تمرين#java.m4.l2.e3
المحاولات: 0جارٍ التحميل…

قم بتعريف ArrayList من سلسلة الألوان المسماة. أضف الألوان الأحمر والأخضر والأزرق إلى القائمة. وأخيرًا، استخدم حلقة for-each للتكرار عبر القائمة وطباعة كل لون على الشاشة.

جارٍ تحميل المحرر…
إظهار التلميح

قم بتعريف القائمة باستخدام `ArrayList<String>colors = new ArrayList<>();`، وأضف الألوان الثلاثة، واستخدم حلقة `for (String c :colors)` لطباعتها باستخدام `System.out.println(c);`.

الحل متاح بعد 3 من المحاولات