موصى به, 2024

اختيار المحرر

الفرق بين ArrayList وناقلات في جاوة

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

دعونا ندرس بعض الاختلافات الأخرى بمساعدة مخطط المقارنة الموضح أدناه.

رسم بياني للمقارنة

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

تعريف ArrayList

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

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

 الطبقة ArrayList 

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

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

 ArrayList S1 = new ArrayList ()؛ System.out.println ("الحجم الأولي لـ S1:" + S1.size ())؛ S1.add ( "T")؛ S1.add ( "C")؛ S1.add ( "H")؛ S1.add (1، "E")؛ System.out.println ("بعد إضافة S1 يحتوي على:" + S1)؛ System.out.println ("حجم S1 بعد الإضافة:" + S1.size ())؛ S1.remove ("T") ؛ S1.remove (2)؛ System.out.println ("بعد الحذف S1 يحتوي على:" + S1)؛ System.out.println ("حجم S1 بعد الحذف:" + S1.size ())؛ // OutputInitial size of S1: 0 After addition S1 contains: [T، E، C، H]؛ حجم S1 بعد الإضافة: 4 بعد الحذف S1 يحتوي على: [E، H] حجم S1 بعد الحذف: 2 

في الكود السابق ، يمكنك رؤية ذلك ؛ أنا خلقت مجموعة من الكائنات من نوع السلسلة. أضفت بعض الكائنات إلى المصفوفة S1 باستخدام أسلوب add () ، وحذفت فيما بعد بعض الكائنات باستخدام أسلوب remove (). يمكنك الملاحظة إذا لم تحدد الحجم الأولي للمصفوفة ، فسيكون طولها 0. كما ترون الصفيف ينمو ويتقلص حجم كلما أضفت وحذف العناصر.

تعريف المتجهات

Vector عبارة عن فئة قديمة تم إعادة تصميمها لدعم فئة المجموعة في التسلسل الهرمي لإطار المجموعة. يتم تعريف فئة المتجهين أيضًا في حزمة java.util ، وتمديدها بواسطة فئة AbstractList وتنفيذها بواسطة واجهة القائمة . يتم تعريف الفئة Vector على النحو التالي:

 ناقل الطبقة 

هنا ، يعرّف E نوع الكائن الذي سيتم تخزينه في صفيف. الصفيف الذي تم إنشاؤه باستخدام فئة Vector هو متغير الطول. يزيد حجمه ضعف إذا لم يتم تحديد الزيادة. دعونا نفهم إنشاء مجموعة باستخدام Vector.

 Vector V = new Vector (1،1)؛ V.addElement ( "تيك")؛ V.addElement ( "الاختلافات")؛ System.out.println ("السعة بعد الإضافة 2:" + V.capacity ())؛ V.addElement ( "بين")؛ V.addElement ( "ناقلات")؛ System.out.println ("السعة الحالية:" + V.capacity ()) ؛ // سعة الإخراج بعد إضافة 2: 2 القدرة الحالية: 4 

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

الاختلافات الرئيسية بين ArrayList وناقلات

  1. مؤشرات ترابط متعددة يمكن أن تعمل على ArrayList في نفس الوقت ومن ثم يعتبر غير متزامن . بخلاف ArrayList ، يمكن فقط تشغيل مؤشر ترابط واحد على متجه في وقت؛ وبالتالي يطلق عليه متزامنة .
  2. في إصدار سابق من Java ، توفر بعض الفئات والواجهات طرق تخزين الكائنات التي تم استدعاءها إلى فئات Legacy. Vector واحدة من بين فئة Java القديمة. في وقت لاحق ، تم إعادة تصميم هذه الفصول القديمة لدعم فئة المجموعات في حين ، الطبقة ArrayList هي فئة تجميع قياسية.
  3. عندما يتم استخدام حد الصفيف بالكامل ويضاف كائن جديد بجوار الصفيف المستنفد ، ينمو حجمه في كلتا الحالتين ، أي في ArrayList وكذلك في Vector ولكن ، الفرق هو أنه في ArrayList ، إذا لم يتم تحديد الحجم يتزايد بنسبة 50٪ من الصفيف الحالي ، في حين أنه يتم مضاعفة حجم متجه Vector إذا لم يتم تحديد قيمة الزيادة.
  4. يستخدم Vector التعداد وكذلك Iterator لاجتياز صفيف بينما يستخدم ArrayList فقط itator لـ traversing صفيف.
  5. بما أن ArrayList غير متزامن والعديد من مؤشرات الترابط يمكن أن تعمل عليه في نفس الوقت ، فإن أداءه أفضل من Vector الذي يعمل عليه مؤشر ترابط واحد فقط في كل مرة.

التشابه:

  1. يتم تعريف ArrayList و Vector في حزمة java.util.
  2. ArrayList و Vector على حد سواء تمديد فئة AbsractList.
  3. ArrayList والمتجهات على حد سواء تنفذ واجهة قائمة.
  4. يتم استخدام ArrayList و Vectors لإنشاء صفيف ديناميكي ينمو كما هو مطلوب.
  5. ArrayList و Vector على حد سواء تحتفظ مراجع الكائن.

استنتاج:

أختتم بالقول إن استخدام ArrayList أفضل من استخدام Vector لأنه يؤدي بشكل أسرع وأفضل.

Top