المصفوفات في جافا

المصفوفات في جافا

في Java، تعد المصفوفة بنية بيانات خطية مهمة تسمح لنا بتخزين قيم متعددة من نفس النوع.

  • المصفوفات في Java هي كائنات مثل كافة الكائنات الأخرى في مصفوفات Java ترث ضمنيًا من فئة java.lang.Object. يسمح لك هذا باستدعاء الأساليب المحددة في الكائن (مثل toString () يساوي () و hashCode ()).
  • تحتوي المصفوفات على خاصية الطول المضمنة والتي توفر عدد العناصر في المصفوفة
Java
   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      // initializing array      int  []     arr     =     {  40       55       63       17       22  };      // size of array      int     n     =     arr  .  length  ;      // traversing array      for     (  int     i     =     0  ;     i      <     n  ;     i  ++  )      System  .  out  .  print  (  arr  [  i  ]     +     ' '  );      }   }   

الإخراج
40 55 63 17 22  

الملامح الرئيسية للمصفوفات

  • تخزين البدائيات والكائنات: يمكن لمصفوفات Java أن تحتوي على كلا النوعين البدائيين (مثل int char boolean وما إلى ذلك) والكائنات (مثل String Integer وما إلى ذلك)
  • تخصيص الذاكرة المتجاورة عندما نستخدم مصفوفات من الأنواع البدائية، يتم تخزين العناصر في مواقع متجاورة. بالنسبة للأنواع غير البدائية، يتم تخزين مراجع العناصر في مواقع متجاورة.
  • الفهرسة الصفرية: العنصر الأول من المصفوفة موجود في الفهرس 0.
  • طول ثابت: بعد إنشاء المصفوفة، يصبح حجمها ثابتًا؛ لا يمكننا تغييره.
primitive_array_تمثيل المصفوفة البدائية في جافا تحديث عنصر الصفيفتمثيل المصفوفات غير البدائية في Java

أساسيات العملية على المصفوفات في جافا

1. الإعلان عن مصفوفة

الشكل العام لإعلان المصفوفة هو 

// الطريقة الأولى:
int arr[];

// الطريقة الثانية:
int[] آر;

يحدد نوع العنصر نوع بيانات كل عنصر يتكون من المصفوفة. مثل مصفوفة الأعداد الصحيحة، يمكننا أيضًا إنشاء مصفوفة من أنواع البيانات البدائية الأخرى مثل char float double وما إلى ذلك أو أنواع البيانات المحددة من قبل المستخدم (كائنات من فئة).

ملحوظة: إنها الطريقة التي يمكننا من خلالها إنشاء متغير مصفوفة ولا يوجد مصفوفة فعلية. إنه يخبر المترجم فقط أن هذا المتغير (int Array) سيحتوي على مصفوفة من النوع الصحيح.

2. تهيئة صفيف في جافا

عندما يتم الإعلان عن مصفوفة، يتم إنشاء مرجع للمصفوفة فقط. نستخدم new لتخصيص مصفوفة ذات حجم معين.

int arr[] = new int[size];

  • يكون إعلان المصفوفة ثابتًا بشكل عام، ولكن إذا لم يتم تحديد الحجم، فسيتم تغيير حجم المصفوفة ديناميكيًا.
  • يتم دائمًا تخصيص ذاكرة المصفوفات ديناميكيًا (في مقطع الكومة) في Java. وهذا يختلف عن C/C++ حيث يمكن تخصيص الذاكرة بشكل ثابت أو تخصيصها ديناميكيًا.
  • ستتم تهيئة العناصر الموجودة في المصفوفة المخصصة بواسطة new تلقائيًا إلى صفر (للأنواع الرقمية) أو خطأ (للأنواع المنطقية) أو خالية (للأنواع المرجعية).

صفيف حرفي في جافا

في الحالة التي يكون فيها حجم المصفوفة ومتغيراتها معروفة بالفعل، يمكن استخدام القيم الحرفية للمصفوفة. 

// الإعلان عن المصفوفة بشكل حرفي
int[] arr = new int[]{ 12345678910 };

  • يحدد طول هذا المصفوفة طول المصفوفة التي تم إنشاؤها.
  • ليست هناك حاجة لكتابة الجزء الجديد int[] في أحدث إصدارات Java.

3. تغيير عنصر الصفيف

لتغيير عنصر، قم بتعيين قيمة جديدة إلى فهرس محدد. يبدأ الفهرس بـ 0 وينتهي عند (إجمالي حجم المصفوفة) -1.

صفيف اجتياز

// تغيير العنصر الأول إلى 90
آر[0] = 90;

4. طول المصفوفة

يمكننا الحصول على طول المصفوفة باستخدام خاصية الطول:

// الحصول على طول المصفوفة
int n = arr.length;

5. الوصول إلى كافة عناصر المصفوفة وتحديثها

  • يمكن الوصول إلى جميع عناصر المصفوفة باستخدام Java for Loop.
  • يتم الوصول إلى كل عنصر في المصفوفة عبر الفهرس الخاص به.
الإخراجالوصول إلى جميع عناصر المصفوفة وتحديثها

برنامج Java لتوضيح كيفية إنشاء مصفوفة من الأعداد الصحيحة، يضع بعض القيم في المصفوفة ويطبع كل قيمة إلى الإخراج القياسي

Java
   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      // declares an Array of integers.      int  []     arr  ;      // allocating memory for 5 integers.      arr     =     new     int  [  5  ]  ;      // initialize the elements of the array      // first to last(fifth) element      arr  [  0  ]     =     2  ;      arr  [  1  ]     =     4  ;      arr  [  2  ]     =     8  ;      arr  [  3  ]     =     12  ;      arr  [  4  ]     =     16  ;      // accessing the elements of the specified array      for     (  int     i     =     0  ;     i      <     arr  .  length  ;     i  ++  )      System  .  out  .  println  (  'Element at index '     +      i     +     ' : '     +     arr  [  i  ]  );      }   }   

الإخراج
Element at index 0 : 2 Element at index 1 : 4 Element at index 2 : 8 Element at index 3 : 12 Element at index 4 : 16  

مصفوفات الكائنات في جافا

يتم إنشاء مجموعة من الكائنات مثل مجموعة من عناصر البيانات من النوع البدائي

مثال : نحن هنا نأخذ فصلًا دراسيًا للطلاب وننشئ مصفوفة من الطلاب تحتوي على خمسة كائنات للطلاب مخزنة في المصفوفة. يجب إنشاء كائنات الطالب باستخدام مُنشئ فئة الطالب ويجب تعيين مراجعها لعناصر المصفوفة.

Java
   class   Student     {      public     int     roll_no  ;      public     String     name  ;          Student  (  int     roll_no       String     name  ){      this  .  roll_no     =     roll_no  ;      this  .  name     =     name  ;      }   }   public     class   Geeks     {      public     static     void     main  (  String  []     args  ){          // declares an Array of Student      Student  []     arr  ;      // allocating memory for 5 objects of type Student.      arr     =     new     Student  [  5  ]  ;      // initialize the elements of the array      arr  [  0  ]     =     new     Student  (  1       'aman'  );      arr  [  1  ]     =     new     Student  (  2       'vaibhav'  );      arr  [  2  ]     =     new     Student  (  3       'shikar'  );      arr  [  3  ]     =     new     Student  (  4       'dharmesh'  );      arr  [  4  ]     =     new     Student  (  5       'mohit'  );      // accessing the elements of the specified array      for     (  int     i     =     0  ;     i      <     arr  .  length  ;     i  ++  )      System  .  out  .  println  (  'Element at '     +     i     +     ' : { '      +     arr  [  i  ]  .  roll_no     +     ' '      +     arr  [  i  ]  .  name  +  ' }'  );      }   }   

الإخراج
Element at 0 : { 1 aman } Element at 1 : { 2 vaibhav } Element at 2 : { 3 shikar } Element at 3 : { 4 dharmesh } Element at 4 : { 5 mohit }  

ماذا يحدث إذا حاولنا الوصول إلى عناصر خارج حجم المصفوفة؟

يقوم JVM بطرح ArrayIndexOutOfBoundsException للإشارة إلى أنه تم الوصول إلى المصفوفة باستخدام فهرس غير قانوني. يكون الفهرس إما سالبًا أو أكبر من أو يساوي حجم المصفوفة.

يوضح الكود أدناه ما يحدث إذا حاولنا الوصول إلى عناصر خارج حجم المصفوفة:

Java
   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      int  []     arr     =     new     int  [  4  ]  ;      arr  [  0  ]     =     10  ;      arr  [  1  ]     =     20  ;      arr  [  2  ]     =     30  ;      arr  [  3  ]     =     40  ;      System  .  out  .  println  (      'Trying to access element outside the size of array'  );      System  .  out  .  println  (  arr  [  5  ]  );      }   }   

الإخراج:

إخراج العناصر خارج حجم المصفوفة

تمرير المصفوفات إلى الأساليب

مثل المتغيرات، يمكننا أيضًا تمرير المصفوفات إلى الأساليب. على سبيل المثال، يقوم البرنامج أدناه بتمرير المصفوفة إلى الطريقة sum لحساب مجموع قيم المصفوفة.

مثال:

Java
   public     class   Geeks     {      // Driver method      public     static     void     main  (  String     args  []  )      {      int     arr  []     =     {     3       1       2       5       4     };      // passing array to method m1      sum  (  arr  );      }      public     static     void     sum  (  int  []     arr  )      {      // getting sum of array values      int     sum     =     0  ;      for     (  int     i     =     0  ;     i      <     arr  .  length  ;     i  ++  )      sum     +=     arr  [  i  ]  ;      System  .  out  .  println  (  'sum of array values : '     +     sum  );      }   }   

الإخراج
sum of array values : 15  

توضيح

  • يوضح برنامج Java هذا كيفية تمرير مصفوفة إلى إحدى الطرق.
  • تم الإعلان عن مصفوفة عدد صحيح وتهيئتها في الطريقة الرئيسية.
  • يتم استدعاء الأسلوب sum() باستخدام arr كوسيطة.
  • داخل طريقة sum() تتم إضافة جميع عناصر المصفوفة باستخدام حلقة for.
  • ثم تتم طباعة المبلغ النهائي على وحدة التحكم.

إرجاع المصفوفات من الأساليب

كالعادة، يمكن للطريقة أيضًا إرجاع مصفوفة. على سبيل المثال، يقوم البرنامج أدناه بإرجاع مصفوفة من الطريقة m1. 

مثال:

Java
   class   Geeks     {      // Driver method      public     static     void     main  (  String     args  []  )      {      int     arr  []     =     m1  ();      for     (  int     i     =     0  ;     i      <     arr  .  length  ;     i  ++  )      System  .  out  .  print  (  arr  [  i  ]     +     ' '  );      }      public     static     int  []     m1  ()      {      // returning array      return     new     int  []     {     1       2       3     };      }   }   

الإخراج
1 2 3  

مزايا مصفوفات جافا

  • الوصول الفعال: يعد الوصول إلى عنصر ما من خلال فهرسه سريعًا وله تعقيد زمني ثابت O(1).
  • إدارة الذاكرة: المصفوفات لها حجم ثابت مما يجعل إدارة الذاكرة واضحة ويمكن التنبؤ بها.
  • تنظيم البيانات: تساعد المصفوفات في تنظيم البيانات بطريقة منظمة مما يسهل إدارة العناصر ذات الصلة.

عيوب مصفوفات جافا

  • الحجم الثابت: بمجرد إنشاء المصفوفة، لا يمكن تغيير حجمها مما قد يؤدي إلى إهدار الذاكرة إذا تم المبالغة في تقدير الحجم أو عدم كفاية التخزين إذا تم التقليل من حجمه.
  • نوع التجانس: يمكن للمصفوفات فقط تخزين العناصر من نفس نوع البيانات والتي قد تتطلب معالجة إضافية لأنواع مختلطة من البيانات.
  • الإدراج والحذف: قد يكون إدراج العناصر أو حذفها خاصة في منتصف المصفوفة مكلفًا لأنه قد يتطلب تغيير العناصر.

المشاركات ذات الصلة

  • صفيف خشنة في جافا
  • لكل حلقة في جافا
  • فئة المصفوفات في جافا