ما هي المصفوفة الديناميكية في جافا؟



المصفوفة الديناميكية في Java هي نوع من المصفوفات مع تحسين كبير لتغيير الحجم تلقائيًا. القيد الوحيد للمصفوفات هو أنها ذات حجم ثابت.

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

مقدمة للصفيف الديناميكي في جافا

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





  • بحث سريع . تمامًا مثل المصفوفات ، عند استرداد العنصر في فهرس معين ، يستغرق وقت O (1).



  • حجم متغير . يمكننا إدراج العديد من العناصر كما نريد وسوف تتوسع المصفوفة الديناميكية وفقًا لذلك للاحتفاظ بها.

  • سهل التخزين المؤقت . على غرار المصفوفات ، يمكن للمصفوفات الديناميكية وضع العناصر بجانب بعضها البعض في الذاكرة ، مما يجعل الاستخدام الفعال للذاكرة المؤقتة.



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

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

  • عمليات الإدراج والحذف مكلفة. على غرار المصفوفات ، يتم تخزين العناصر بجوار بعضها البعض. لذلك ، أثناء إضافة عنصر أو إزالته في وسط المصفوفة ، يتطلب الأمر دفع عناصر أخرى ، والتي تأخذ O (n) في كل مرة.

توضح المخططات أدناه كيفية عمل المصفوفات في الوقت الفعلي وتصور كيفية تكديس العناصر. يوضح أيضًا كيف تتغير التعليمات لحالة متوسطة وأسوأ حالة لوظائف الصفيف.

مجموعة - مجموعة ديناميكية في جافا - edureka

خوارزمية جدولة روبن في ج

الحجم مقابل السعة

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

مضاعفة يلحق

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

حذف عنصر

أثناء حذف عنصر من مصفوفة ، تزيل طريقة 'remove ()' الافتراضية عنصرًا من النهاية وتخزن صفرًا تلقائيًا في الفهرس الأخير. سيحذف أيضًا العناصر الموجودة في فهرس معين عن طريق استدعاء طريقة removeAt (i) حيث يكون الحرف 'I' هو الفهرس. تقوم طريقة removeAt (i) بإزاحة جميع العناصر اليمنى في الجانب الأيسر من الفهرس المحدد.

تغيير حجم المصفوفة

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

يوجد أدناه مثال لبرنامج حيث يصبح حجم المصفوفة ممتلئًا ويتم نسخ العناصر الجديدة إلى مصفوفة مزدوجة الحجم جديدة. العنصر الذي هو عنصر سلسلة يسمى 'Mahavir' هو إضافة إلى مجموعة كاملة بالفعل من الحجم 3.

import java.util.ArrayList import java.util.Arrays import java.util.Scanner public class AddingItemsDynamically {public static void main (String args []) {Scanner sc = new Scanner (System.in) System.out.println (' أدخل حجم المصفوفة :: ') int size = sc.nextInt () String myArray [] = new String [size] System.out.println (' أدخل عناصر المصفوفة (Strings) :: ') لـ (int أنا = 0 أنا

انتاج:

بهذا نصل إلى نهاية مقالة مصفوفة ديناميكية في جافا. أتمنى أن تكون لديك فكرة عن كيفية العمل مع المصفوفات الديناميكية.

تفحص ال من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم. تم تصميم دورة تدريب وشهادة Java J2EE و SOA من Edureka للطلاب والمهنيين الذين يرغبون في أن يصبحوا مطوري Java. تم تصميم الدورة التدريبية لمنحك السبق في برمجة Java وتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في مدونة 'Dynamic Array in Java' وسنعاود الاتصال بك في أقرب وقت ممكن.