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

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

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

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

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