تعد المصفوفات إحدى هياكل البيانات المهمة لكل لغة برمجة. بالطبع، تقوم اللغات المختلفة بتنفيذ المصفوفات ومعالجتها بشكل مختلف.
تُستخدم المصفوفات المتوفرة في لغة Java لتخزين العناصر ذات الحجم الثابت من نفس النوع.
يمكنك التصريح عن متغير مصفوفة، مثل الأرقام[100] بدلاً من التصريح المباشر عن 100 متغير مستقل رقم 0، رقم 1، ....، رقم 99.
سيقدم لك هذا البرنامج التعليمي تعريف مصفوفات Java وإنشائها وتهيئتها، وسيمنحك الكود المقابل.
يجب أولاً الإعلان عن متغيرات المصفوفة قبل أن يتم استخدام المصفوفة في البرنامج. ما يلي هو بناء الجملة للإعلان عن متغيرات المصفوفة:
dataType[]arrayRefVar;//首选的方法或dataTypearrayRefVar[];//效果相同,但不是首选方法
ملاحظة: يوصى باستخدام نمط تعريف dataType[] arrayRefVar للإعلان عن متغيرات المصفوفة. يأتي نمط dataType arrayRefVar[] من لغة C/C++ ويتم اعتماده في Java للسماح لمبرمجي C/C++ بفهم لغة جافا بسرعة.
فيما يلي أمثلة التعليمات البرمجية لكلا بناء الجملة:
double[]myList;//首选的方法或doublemyList[];//效果相同,但不是首选方法
تستخدم لغة Java عامل التشغيل الجديد لإنشاء مصفوفة.
arrayRefVar=newdataType[arraySize];
بيان بناء الجملة أعلاه يفعل شيئين:
1. قم بإنشاء مصفوفة باستخدام dataType[arraySize].
2. قم بتعيين مرجع المصفوفة التي تم إنشاؤها حديثًا إلى المتغير arrayRefVar.
يمكن إكمال الإعلان عن متغيرات المصفوفة وإنشاء المصفوفة في عبارة واحدة، كما هو موضح أدناه:
dataType[]arrayRefVar=newdataType[arraySize];
بالإضافة إلى ذلك، يمكنك أيضًا إنشاء مصفوفة باستخدام الطريقة التالية.
dataType[]arrayRefVar={value0,value1,...,valuek};
يتم الوصول إلى عناصر المصفوفة عن طريق الفهرس. تبدأ فهرسة المصفوفة عند 0، لذا تتراوح قيم الفهرس من 0 إلى arrayRefVar.length-1.
ثم عندما يفتح المصفوفة مساحة، يمكنك العمل بالطريقة التالية:
مثال: تعريف مصفوفة int
public class ArrayDemo { public static void main(String args[]) { int data[] = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
بالإضافة إلى الإعلان عن المساحة وتخصيصها، فإن المصفوفة نفسها لديها وضع تخصيص آخر.
مثال: استخدم الوضع خطوة بخطوة لفتح مساحة المصفوفة
public class ArrayDemo { public static void main(String args[]) { int data[] = null; data = new int[3]; /*开辟了一个长度为3的数组*/ data[0] = 10; // 第一个元素 data[1] = 20; // 第二个元素 data[2] = 30; // 第三个元素 for(int x = 0; x < data.length; x++) { System.out.println(data[x]); //通过循环控制索引 } } }
لكن تأكد من تذكر أن المصفوفات هي أنواع بيانات مرجعية، لذا يجب تخصيص مساحة (إنشاء مثيل لها) قبل استخدام المصفوفة إذا تم استخدام مصفوفة بدون مساحة مخصصة، فستظهر رسالة NullPointerException
بالتأكيد:
public class ArrayDemo { public static void main(String args[]) { int data[] = null; System.out.println(data[x]); } }
وهذا المبدأ هو بالضبط نفس ما تم شرحه من قبل.
سيتم بالتأكيد استخدام المصفوفات أثناء التطوير، لكن العمليات المشابهة لما سبق نادرة. في التطوير الفعلي المستقبلي، سيتم استخدام مفهوم المصفوفة بشكل أكبر، وعندما يتم استخدامه مباشرة، فإنه في معظم الحالات يكون مجرد مخرج للحلقة.
يتم تحديد نوع عنصر المصفوفة وحجم المصفوفة، لذلك عند معالجة عناصر المصفوفة، نستخدم عادةً حلقة أساسية أو حلقة foreach.
يوضح هذا المثال بشكل كامل كيفية إنشاء المصفوفات وتهيئتها ومعالجتها:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(inti=0;i<myList.length;i++){ System.out.println(myList[i]+""); } //计算所有元素的总和doubletotal=0; for(inti=0;i<myList.length;i++){ total+=myList[i]; } System.out.println("Totalis"+total); //查找最大元素doublemax=myList[0]; for(inti=1;i<myList.length;i++){ if(myList[i]>max)max=myList[i]; } System.out.println("Maxis"+max); } }
نتائج التجميع والتشغيل للمثال أعلاه هي كما يلي:
1.9 2.9 3.4 3.5 Totalis11.7 Maxis3.5
قدم JDK 1.5 نوعًا جديدًا من الحلقات، يُسمى حلقة foreach أو حلقة محسنة، والتي تتكرر عبر مصفوفة دون استخدام نصوص برمجية.
تنسيق بناء الجملة كما يلي:
for(type element: array){ System.out.println(element); }
يستخدم هذا المثال لعرض جميع العناصر في المصفوفة myList:
publicclassTestArray{ publicstaticvoidmain(String[]args){ double[]myList={1.9,2.9,3.4,3.5}; //打印所有数组元素for(doubleelement:myList){ System.out.println(element); } } }
نتائج التجميع والتشغيل للمثال أعلاه هي كما يلي:
1.9 2.9 3.4 3.5
يمكن تمرير المصفوفات كمعلمات إلى الأساليب. على سبيل المثال، المثال التالي هو أسلوب يطبع العناصر في صفيف int.
publicstaticvoidprintArray(int[]array){ for(inti=0;i<array.length;i++){ System.out.print(array[i]+""); } }
يستدعي المثال التالي التابع printArray لطباعة 3 و1 و2 و6 و4 و2:
printArray(newint[]{3,1,2,6,4,2});
publicstaticint[]reverse(int[]list){ int[]result=newint[list.length]; for(inti=0,j=result.length-1;i<list.length;i++,j--){ result[j]=list[i]; } returnresult; }
في المثال أعلاه، يتم استخدام مصفوفة النتائج كقيمة الإرجاع للدالة.
يمكن للفئة java.util.Arrays تشغيل المصفوفات بسهولة، وجميع الأساليب التي توفرها ثابتة. لديه الوظائف التالية:
قم بتعيين قيمة للمصفوفة: من خلال طريقة التعبئة.
فرز المصفوفة: استخدم طريقة الفرز بترتيب تصاعدي.
مقارنة المصفوفات: استخدم طريقة يساوي لمقارنة ما إذا كانت قيم العناصر في المصفوفة متساوية.
البحث عن عناصر المصفوفة: يمكن لأسلوب البحث الثنائي إجراء عملية بحث ثنائية على المصفوفة التي تم فرزها.
يرجى الاطلاع على الجدول أدناه للحصول على تعليمات محددة:
رقم سري | الطرق والتعليمات |
---|---|
1 | يستخدم البحث الثنائي العام الثابت (Object[] a, Object key) خوارزمية بحث ثنائية للبحث عن كائن ذي قيمة معينة (Byte، Int، double، إلخ) في المصفوفة المحددة. يجب فرز المصفوفة قبل الاتصال. إذا كانت قيمة البحث موجودة في مصفوفة، فسيتم إرجاع فهرس مفتاح البحث؛ وإلا فسيتم إرجاع (-( نقطة الإدراج ) - 1). |
2 | منطقية ثابتة عامة يساوي (طويل [] أ، طويل [] a2) يُرجع صحيحًا إذا كانت الصفيفتان الطويلتان المحددتان متساويتان لبعضهما البعض. يعتبر المصفوفتان متساويتين إذا كانا يحتويان على نفس عدد العناصر وكانت جميع أزواج العناصر المقابلة في كلا المصفوفتين متساوية. بمعنى آخر، يكون المصفوفان متساويين إذا كانا يحتويان على نفس العناصر بنفس الترتيب. يعمل نفس الأسلوب مع جميع أنواع البيانات الأساسية الأخرى (Byte، short، Int، وما إلى ذلك). |
3 | تقوم تعبئة الفراغ الثابت العام (int[] a, int val) بتعيين قيمة int المحددة لكل عنصر في النطاق المحدد لمصفوفة النوع int المحددة. يعمل نفس الأسلوب مع جميع أنواع البيانات الأساسية الأخرى (Byte، short، Int، وما إلى ذلك). |
4 | يقوم فرز الفراغ الثابت العام (Object[] a) بفرز مصفوفة الكائنات المحددة بترتيب تصاعدي وفقًا للترتيب الطبيعي لعناصرها. يعمل نفس الأسلوب مع جميع أنواع البيانات الأساسية الأخرى (Byte، short، Int، وما إلى ذلك). |