المصفوفات في Java: Array و ArrayList
إذا أردت تخزين درجات 40 طالباً، فلن تنشئ 40 متغيراً منفصلاً! المصفوفة (Array) تجمع قيماً كثيرة من نفس النوع تحت اسم واحد. في هذا الدرس ستتعلم المصفوفات في Java، ثم ستتعرف على ArrayList: القائمة المرنة التي يستخدمها المبرمجون أكثر في التطبيقات الحقيقية.
إنشاء مصفوفة
Section titled “إنشاء مصفوفة”int[] scores = {85, 92, 78, 64};System.out.println(scores[0]);System.out.println(scores.length);scores[1] = 95;854int[]: نوع المصفوفة: «مصفوفة أعداد صحيحة».{...}: القيم الأولية.scores[0]: أول عنصر، فالترقيم يبدأ من صفر.length: عدد العناصر، وهي خاصية بدون أقواس.scores[1] = 95: تعديل العنصر الثاني.
تخيّل المصفوفة مثل صف من الخزائن المرقمة في المدرسة: عددها ثابت، وكل خزانة لها رقم، وتستطيع تغيير ما بداخلها.
طباعة المصفوفة
Section titled “طباعة المصفوفة”System.out.println(Arrays.toString(scores));System.out.println(scores);[85, 95, 78, 64][I@6572421طباعة المصفوفة مباشرة تعطيك شيئاً غريباً مثل [I@6572421، وهو نوعها وعنوانها في الذاكرة! استخدم Arrays.toString لطباعة عناصرها، ولا تنسَ السطر import java.util.Arrays; في أول الملف.
مصفوفة فارغة بحجم محدد
Section titled “مصفوفة فارغة بحجم محدد”String[] names = new String[3];names[0] = "سارة";System.out.println(Arrays.toString(names));
int[] counts = new int[4];System.out.println(Arrays.toString(counts));[سارة, null, null][0, 0, 0, 0]عند الإنشاء بـ new وحجم، تأخذ العناصر قيماً افتراضية: صفر للأرقام، و false لـ boolean، و null للنصوص والكائنات.
المرور على المصفوفة
Section titled “المرور على المصفوفة”لحساب المجموع والمتوسط وأكبر قيمة:
int sum = 0;int max = scores[0];for (int s : scores) { sum += s; if (s > max) max = s;}System.out.println("المجموع: " + sum);System.out.println("المتوسط: " + (double) sum / scores.length);System.out.println("الأكبر: " + max);المجموع: 322المتوسط: 80.5الأكبر: 95لاحظ (double) sum: بدونها ستكون القسمة بين عددين صحيحين، فيضيع الكسر وتصبح النتيجة 80 بدلاً من 80.5.
الترتيب
Section titled “الترتيب”Arrays.sort(scores);System.out.println(Arrays.toString(scores));[64, 78, 85, 95]Arrays.sort ترتب المصفوفة نفسها تصاعدياً.
المصفوفات ثنائية الأبعاد
Section titled “المصفوفات ثنائية الأبعاد”مصفوفة كل عنصر فيها مصفوفة، مثل جدول فيه صفوف وأعمدة:
int[][] grid = { {1, 2, 3}, {4, 5, 6}};System.out.println(grid[1][2]);for (int[] row : grid) { System.out.println(Arrays.toString(row));}6[1, 2, 3][4, 5, 6]grid[1][2]: الرقم الأول للصف، والثاني للعمود. أي الصف الثاني والعمود الثالث. تُستخدم في الجداول ولوحات الألعاب مثل XO والشطرنج.
ArrayList: القائمة المرنة
Section titled “ArrayList: القائمة المرنة”في التطبيقات الحقيقية، غالباً لا تعرف عدد العناصر مسبقاً. هنا تأتي ArrayList:
import java.util.ArrayList;
ArrayList<String> tasks = new ArrayList<>();tasks.add("مذاكرة");tasks.add("رياضة");tasks.add("قراءة");tasks.remove("رياضة");tasks.set(0, "مذاكرة Java");System.out.println(tasks);System.out.println(tasks.size());System.out.println(tasks.get(1));System.out.println(tasks.contains("قراءة"));[مذاكرة Java, قراءة]2قراءةtrue| المصفوفة | ArrayList |
|---|---|
| حجم ثابت | تكبر وتصغر تلقائياً |
arr[0] |
list.get(0) |
arr.length |
list.size() |
arr[0] = x |
list.set(0, x) |
تحتاج Arrays.toString للطباعة |
تُطبع مباشرة |
<String> تحدد نوع العناصر. ولاحظ أن ArrayList لا تقبل الأنواع البدائية مباشرة، فبدلاً من int تكتب Integer: ArrayList<Integer>.
جرّب بنفسك
Section titled “جرّب بنفسك”- أنشئ مصفوفة بدرجات 5 طلاب، واطبع المتوسط وأقل درجة.
- رتبها واطبعها بـ
Arrays.toString. - أنشئ
ArrayListلقائمة مشتريات، أضف 4 عناصر، واحذف واحداً، واطبع العدد. - تحدٍّ: أنشئ مصفوفة ثنائية الأبعاد 3×3 للعبة XO، وضع فيها
'X'و'O'، واطبعها صفاً صفاً.
أخطاء شائعة
Section titled “أخطاء شائعة”- رقم خارج الحدود:
scores[10]في مصفوفة من 4 عناصر تعطي خطأIndex 10 out of bounds for length 4. آخر رقم هوlength - 1. - طباعة المصفوفة مباشرة: تطبع عنوانها. استخدم
Arrays.toString. - الخلط بين length و size:
lengthللمصفوفة (بدون أقواس)، وsize()لـ ArrayList.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
في المصفوفة int[] a = {4, 7, 9}; ما قيمة a[a.length - 1]؟
a.length تساوي 3، و a[2] هو آخر عنصر وقيمته 9.
سؤال
أي اختيار هو الأنسب لقائمة مهام يضيف إليها المستخدم ويحذف منها باستمرار؟
المصفوفة حجمها ثابت، أما ArrayList فتكبر وتصغر تلقائياً مع الإضافة والحذف.
الخلاصة
Section titled “الخلاصة”int[] a = {...}تنشئ مصفوفة، والترقيم يبدأ من صفر، وlengthعدد العناصر.- حجم المصفوفة ثابت، و
new int[4]تنشئها بقيم افتراضية. Arrays.toStringللطباعة، وArrays.sortللترتيب، وfor-eachللمرور عليها.int[][]مصفوفة ثنائية الأبعاد للجداول.ArrayListقائمة مرنة:addوremoveوgetوsetوsize.