المصفوفات
المصفوفة عبارة عن بنية بيانات تقوم بتخزين قيم من نفس النوع. يتم الوصول إلى عنصر صفيف فردي باستخدام فهرس عدد صحيح. على سبيل المثال، إذا كانت a عبارة عن مصفوفة من الأعداد الصحيحة، فإن قيمة التعبير a[i] تساوي العدد الصحيح i في المصفوفة.
يتم تعريف المصفوفة على النحو التالي: أولاً، تتم الإشارة إلى نوع المصفوفة، أي نوع العناصر الموجودة في المصفوفة، متبوعًا بزوج من الأقواس المربعة الفارغة، ثم اسم المتغير. على سبيل المثال، إليك كيفية الإعلان عن مصفوفة تتكون من أعداد صحيحة:
int[] a;
ومع ذلك، هذه العبارة تعلن فقط عن متغير
а
، دون تهيئته بمصفوفة فعلية. لإنشاء مصفوفة، تحتاج إلى استخدام عامل التشغيل
new
.
int[] a = new int [100];
يقوم هذا العامل بإنشاء مصفوفة مكونة من 100 عدد صحيح. يتم ترقيم عناصر هذه المصفوفة من 0 إلى 99 (وليس من 1 إلى 100). بمجرد إنشائه، يمكن ملء المصفوفة، على سبيل المثال، باستخدام حلقة.
int[] а = new int[100];
for (int i = 0; i < 100; i++)
a[i] = i;
إذا حاولت الوصول إلى عنصر
а [100]
(أو أي عنصر آخر فهرسه يقع خارج النطاق من 0 إلى 99) عن طريق إنشاء مصفوفة مكونة من 100 عنصر، فسيتم إنهاء البرنامج بسبب حدوث استثناء لفهرس مصفوفة خارج النطاق. لحساب عدد العناصر في المصفوفة، استخدم طريقة اسم المصفوفة
.length
. على سبيل المثال،
for (int i = 0; i < a.length; i++, System.out.println(a[i]));
بمجرد إنشاء المصفوفة، من المستحيل تغيير حجمها (على الرغم من أنه يمكنك، بالطبع، تغيير عناصرها الفردية). إذا كنت بحاجة إلى تغيير حجم المصفوفة بشكل متكرر أثناء تنفيذ البرنامج، فمن الأفضل استخدام بنية بيانات أخرى تسمى قائمة المصفوفات. يمكن الإعلان عن المصفوفة بطريقتين:
int[] a;
or
int a[];
يفضل معظم مبرمجي Java النمط الأول لأنه يفصل بشكل أكثر وضوحًا بين نوع المصفوفة
int []
(مصفوفة صحيحة) واسم المتغير.
مُهيئات الصفيف والمصفوفات غير المسماة
تتمتع Java بإمكانية إنشاء مصفوفة وتهيئتها في نفس الوقت. فيما يلي مثال على هذا الهيكل النحوي:
int[] smallPrimes = {2, 3, 5, 7, 11, 13};
لاحظ أنه في هذه الحالة ليست هناك حاجة لاستخدام عامل التشغيل
new
. بالإضافة إلى ذلك، يمكنك أيضًا تهيئة مصفوفة غير مسماة:
new int[] {16, 19, 23, 29, 31, 37}
يخصص هذا التعبير الذاكرة لمصفوفة جديدة ويملأها بالأرقام المحددة بين الأقواس المتعرجة. في هذه الحالة، يتم حساب عددهم، وبالتالي يتم تحديد حجم المصفوفة. يعد هذا البناء النحوي مناسبًا للاستخدام لإعادة تهيئة المصفوفة دون إنشاء متغير جديد. على سبيل المثال، التعبير
smallPrimes = new int{17, 19, 23, 29, 31, 37};
هو تعبير مختصر
int[] anonymous = {17, 19, 23, 29, 31, 37};
smallPrimes = anonymous;
يمكنك إنشاء مجموعة بحجم صفر. يمكن أن يكون مثل هذا المصفوفة مفيدًا عند كتابة عملية تقوم بتقييم مصفوفة يتبين أنها فارغة. يتم تعريف المصفوفة ذات الطول الصفري على النحو التالي:
new тип Элементов[]
لاحظ أن مثل هذه المصفوفة لا تعادل كائنًا
null
.
نسخ المصفوفات
يمكن نسخ مصفوفة واحدة إلى مصفوفة أخرى، لكن كلا المتغيرين سيشيران إلى نفس المصفوفة.
int[] luckyNumbers = smallPrimes;
luckyNumbers[5] = 12;
وتظهر النتيجة في الشكل. 3.1. إذا كنت بحاجة إلى نسخ جميع عناصر مصفوفة إلى أخرى، فيجب عليك استخدام طريقة arraycopy من الفئة
System
. تبدو دعوتها كما يلي:
System.arraycopy(from, fromlndex, to, tolndex, count);
يجب أن يكون المصفوفة
to
كبيرة بما يكفي لتحتوي على كافة العناصر المراد نسخها.
الشكل 3.1. نسخ مصفوفة
على سبيل المثال، العوامل الموضحة أدناه، والتي تظهر نتائجها في الشكل. 3.2، قم بإنشاء صفيفين ثم انسخ العناصر الأربعة الأخيرة من المصفوفة الأولى إلى الثانية. يبدأ النسخ من الموضع الثاني في المصفوفة المصدر، وتوضع العناصر المنسوخة في المصفوفة الهدف بدءًا من الموضع الثالث.
int[] smallPrimes = {2, 3, 5, 7, 11, 13};
int[] luckyNumbers = {1001, 1002, 1003, 1004, 1005, 1006, 1007};
System.аrrаусору(smallPrimes, 2, luckyNumbers, 3, 4);
for (int i = 0; i < luckyNumbers.length; i++)
System.out.println(i + ": " + luckyNumbers[i]);
تنفيذ هذه العبارات ينتج النتيجة التالية.
0: 1001
1: 1002
2: 1003
3: 5
4: 7
5: 11
6: 13
أرز. 3.2. نسخ عناصر المصفوفة
تختلف المصفوفة في Java اختلافًا كبيرًا عن المصفوفة في C++. ومع ذلك، فهو عمليًا نفس المؤشر إلى مصفوفة ديناميكية. وهذا يعني أن المشغل
int[] a = new int[100];
يعادل المشغل
int* = new int[100];
а не
int a[100];
في Java،
[]
يتحقق عامل التشغيل الافتراضي من نطاق تغييرات الفهرس. بالإضافة إلى ذلك، لا تحتوي Java على مؤشر حسابي — لا يمكنك زيادة المؤشر للوصول إلى العنصر التالي في المصفوفة.
رابط المصدر: صفائف جافا
GO TO FULL VERSION