الوحدة 6: الواجهات Interface والقوائم ArrayList · الموضوع 14 من 17
الموضوع 14

القوائم الديناميكية ArrayList

قائمة ذكية يكبر حجمها ويصغر حسب الحاجة، بدل المصفوفة ذات الحجم الثابت.

ArrayList<String> names Ali[0]Sara[1]Omar[2] Huda add names.add("Huda");names.size() → 4
بعد هذا الدرس ستستطيع أن:
  • توضّح الفرق بين المصفوفة ذات الحجم الثابت والقائمة ArrayList.
  • تُنشئ قائمة ArrayList لنوع معيّن من البيانات أو الكائنات.
  • تستخدم الدوال add و get و set و remove و size و contains.
  • تمرّ على عناصر القائمة بحلقة for أو for-each لمعالجتها.

١مشكلة المصفوفة

المصفوفة نحدد حجمها عند إنشائها، ولا يمكن تغييره بعد ذلك:

Main.java
int[] marks = new int[3];marks[0] = 80;marks[1] = 50;marks[2] = 92;marks[3] = 70;   // خطأ! المصفوفة حجمها 3 فقط

ماذا لو انضم طالب جديد إلى الشعبة؟ هنا يأتي دور ArrayList: قائمة من الحزمة java.util يزيد حجمها وينقص تلقائيًّا.

Ali[0]Sara[1]Omar[2]Huda[3]
المصفوفة تُحجز بحجم ثابت، أما ArrayList فيكبر تلقائيًّا كلما أضفت عنصرًا بالدالة add، ويصغر عند الحذف.

٢إنشاء القائمة

snippet
import java.util.ArrayList; ArrayList<String> names = new ArrayList<>();

٣أهم الدوال

الدالةوظيفتهامثال
add(x)تضيف عنصرًا في آخر القائمةnames.add("Ali");
get(i)تقرأ العنصر في الموقع inames.get(0)
set(i, x)تغيّر العنصر في الموقع inames.set(1, "Huda");
remove(i) أو remove(x)تحذف عنصرًا بموقعه أو بقيمتهnames.remove("Omar");
size()عدد العناصرnames.size()
contains(x)هل العنصر موجود؟ true أو falsenames.contains("Ali")
isEmpty()هل القائمة فارغة؟names.isEmpty()
clear()تحذف كل العناصرnames.clear();
Main.java
import java.util.ArrayList; public class Main {    public static void main(String[] args) {        ArrayList<String> names = new ArrayList<>();         names.add("Ali");                 // إضافة        names.add("Sara");        names.add("Omar");        System.out.println(names);        System.out.println("Size: " + names.size());         System.out.println("First: " + names.get(0));   // قراءة        names.set(1, "Huda");             // تعديل        names.remove("Omar");             // حذف        System.out.println(names);         System.out.println(names.contains("Ali"));      // بحث    }}
Output – JavaApplication (run)×
run:
[Ali, Sara, Omar]
Size: 3
First: Ali
[Ali, Huda]
true
BUILD SUCCESSFUL (total time: 0 seconds)

٤المرور على عناصر القائمة

بحلقة for-each، أو بحلقة for العادية مع size() و get(i):

Main.java
import java.util.ArrayList; public class Main {    public static void main(String[] args) {        ArrayList<Double> marks = new ArrayList<>();        marks.add(80.0);        marks.add(50.0);        marks.add(92.0);         double sum = 0;        for (double m : marks) {            sum = sum + m;        }        System.out.println("Average: " + sum / marks.size());         for (int i = 0; i < marks.size(); i++) {            System.out.println(i + ": " + marks.get(i));        }    }}
Output – JavaApplication (run)×
run:
Average: 74.0
0: 80.0
1: 50.0
2: 92.0
BUILD SUCCESSFUL (total time: 0 seconds)

٥قائمة من الكائنات

الأهم في البرمجة الشيئية: قائمة من كائنات كلاس كتبته أنت، مثل كلاس Student من التدريب 6:

public class Student {    int id;    String name;    double mark;     public Student(int id, String name, double mark) {        this.id = id;        this.name = name;        this.mark = mark;    }     String getResult() {        if (mark >= 60)            return "Pass";        else            return "Fail";    }}
import java.util.ArrayList; public class Main {    public static void main(String[] args) {        ArrayList<Student> list = new ArrayList<>();        list.add(new Student(4321, "Mohammed", 80));        list.add(new Student(4344, "Turki", 50));        list.add(new Student(4355, "Fahad", 92));         System.out.println("عدد الطلاب: " + list.size());        for (Student s : list) {            System.out.println(s.id + " - " + s.name + " - " + s.getResult());        }    }}
مخطط المشروع مستخرج من الكود. انقر على أي كلاس لفتح كوده.
StudentMain
Student~ id : int~ name : String~ mark : double+ Student(id : int, name : String, mark : double)~ getResult() : StringMain+ main(args : String[]) : void

ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.

Output – Students (run)×
run:
عدد الطلاب: 3
4321 - Mohammed - Pass
4344 - Turki - Fail
4355 - Fahad - Pass
BUILD SUCCESSFUL (total time: 0 seconds)

٦المصفوفة أم ArrayList؟

المصفوفة ArrayArrayList
الحجمثابتيتغيّر تلقائيًّا
الإنشاءint[] a = new int[3];ArrayList<Integer> a = new ArrayList<>();
عدد العناصرa.lengtha.size()
القراءةa[0]a.get(0)
الإضافة والحذفغير ممكنadd و remove
التدريب العملي 18: قائمة طلاب الشعبةقائمة ArrayList من كائنات Student: إضافة وحذف وبحث عن أعلى درجة وطباعة الناجحين.افتح التدريب ←

توقّع وتحقّق

أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.

لإضافة الاسم Ali إلى القائمة names نكتب:

تأمل الكود التالي،

snippet
ArrayList<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");list.remove("B");list.add("D");System.out.println(list.size());

ماذا سيكون الناتج عند تنفيذه؟

أضفنا ثلاثة عناصر ثم حذفنا واحدًا ثم أضفنا واحدًا: 3.

أي سطر صحيح لإنشاء قائمة أعداد صحيحة؟

الأنواع البسيطة مثل int تُكتب بأسمائها الكاملة: Integer.

الحزمة التي يوجد فيها ArrayList:

الخلاصة

انتقل إلى تقييم الدرسأسئلة التقييم، وأكمل الفراغات.ابدأ التقييم ←
أنهيت وحدة «الواجهات Interface والقوائم ArrayList»ثبّت ما تعلّمته بأسئلة مراجعة لمواضيع الوحدة.ابدأ المراجعة ←