اذهب إلى المحتوى
  • 0

استخدام الكلاس Vector بدل المصفوفة في جافا

Zeina Almakdisi

السؤال

Recommended Posts

  • 1

المصفوفة العادية هي كائن برمجي يحوي عدد ثابت من العناصر ويتم تحديد عدد العناصر عن كتابة البرنامج بقيمة ثابتة (أو ضمن متغير)، فمن المساوئ الناتجة هي:

  • حجز عدد عناصر أكبر من اللازم مما يؤدي لحجز ذاكرة بشكل غير ضروري
  • حجز عدد أقل من اللازم وهنا لا يمكن تخزين العناصر الأخرى

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

يمكن الحصول على مثال من السؤال:

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالإضافة إلى إجابة وائل فإن يوجد إختلاف مهم بين الvector(المتجه) والمصفوفة array في جافا وهو أن المتجه متزامن synchronized

مما يعني أن لا يمكن لأكثر من thread أن يقومو بعمليات عل نفس المتجه وتلك الخاصية لها ميزتها وعيبها في ذات الوقت

المميزات

المميزات أنه يضمن لنا عدم حدوت تصادم في البيانات عند محاولة الكتابة على المتجه من قِبل أكثر من thread ويمكن توضيح المقصد من هذا الكلام عبر المثال التالي:

نفترض أن لدينا ملف كبير الحجم نقوم بقرائته من قبل نسختين من الthread بشكل متقطع بحيث يقوم كل ثريد بقراءة 5 ميجا ومن ثم يتم كتابتها في هيكل بيانات ومن ثم يرجع يقرأ 5ميجا أخرى ومن ثم يقوم بكتابتهم في الهيكل وهكذا

إن كنا نستخدم مصفوفة يوجد إحتمالية أن يكتب الthread الأول والثاني في الكتابة في الفهرس رقم 3 في نفس الوقت مما يؤدي إلى مسح بيانات أحدهم وبالتالي يكون لدينا فقد في البيانات, ولكن مع المتجه لن يستطيع أن يكتب إلا thread واحد فقط, بينما الthread الأخر سينتظر لحين إنتهاء الthread الأول من الكتابة ومن ثم يقوم بالكتابة في الفهرس القادم مما يضمن لنا عد حدوث أي فقدان في البيانات

العيوب 

بما أنه كما قلنا متزامن ولا يسمح لأكثر من نسخة thread من الكتابة في نفس الوقت فهذا يسبب بطئ في الأداء فبالتالي إن كنا لا نحتاج إلى ضمان عدم فقدان البيانات ونتعامل مع أكثر من thread فبالتالي لن نحتاج التعامل مع المتجه لأنه سيؤدي إلى فقدان في الأداء مقابل ميزة لا نحتاجها

بالإضافة إلى أن المتجه يأخذ مساحة أكبر في الذاكرة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...