في الدرس الماضي تحدثنا عن الـ built-in array الموجودة في لغة Java، وذكرنا أنها ذات حجم ثابت (fixed size). يعني لو عندنا array من نوع integer اسمها numbers تحتوي على القيم 1، 2، 3، ما فينا نضيف عليها ولا نحذف منها، لأن المساحة المخصصة لها ثابتة.
إذا أردنا تكبير الـ array يدويا، لازم ننشئ array جديدة، وهذا متعب. الحل هو استخدام الـ Dynamic Array.
أحد أبرز تطبيقات الـ dynamic array في Java هو ArrayList. وهو عبارة عن class جاهز نستورده من مكتبة java.util.
import java.util.ArrayList;
الـ ArrayList هو generic type، يعني نحدد له نوع البيانات اللي سيحتويها. مثلا إذا بدنا نخزن أسماء لغات البرمجة:
ArrayList<String> languages = new ArrayList<>();
الفرق بين هذا وبين الـ array العادية:
| الخاصية | String[] | ArrayList<String> |
|---|---|---|
| الحجم | ثابت (fixed) | ديناميكي (dynamic) |
| إضافة عناصر | غير ممكن بعد الإنشاء | ممكن في أي وقت |
| حذف عناصر | غير ممكن مباشرة | ممكن بسهولة |
.add()لإضافة عناصر إلى الـ ArrayList نستخدم المثل add:
languages.add("Java");
languages.add("C#");
الآن الـ languages تحتوي على عنصرين: "Java" في الـ index 0، و"C#" في الـ index 1.
.get()لقراءة قيمة معينة نستخدم .get() ونحدد الـ index:
System.out.println(languages.get(0)); // Java
System.out.println(languages.get(1)); // C#
فينا نضيف أي قيمة بدنا إياها، ما بتفرق ما كانت القيمة.
.set()إذا بدنا نغير قيمة موجودة، نستخدم .set(). هذا المثل يأخذ argument-ين: الـ index والقيمة الجديدة.
مثلا، بدنا نغير "C#" في الـ index 0 إلى "Python":
System.out.println(languages.get(1)); // قبل التعديل: C#
languages.set(1, "Python");
System.out.println(languages.get(1)); // بعد التعديل: Python
بعد تنفيذ البرنامج:
C#
Python
القيمة تغيرت من "C#" إلى "Python".
.remove()أولا، لنضيف عنصرا ثالثا:
languages.add("C++");
الآن الـ languages تحتوي على: "Python", "Java", "C++".
للحذف نستخدم .remove()، وفينا نحذف بطريقتين:
// حذف بالـ index
languages.remove(2); // يحذف "C++"
// أو حذف بالاسم
languages.remove("C++"); // نفس النتيجةاشترك في النشرة البريدية
دروس جديدة، مقالات، وأدوات مباشرة لبريدك.