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

مؤلف: Laura McKinney
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 22 أبريل 2024
Anonim
Java: Array vs ArrayList Difference
فيديو: Java: Array vs ArrayList Difference

المحتوى


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

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

  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. التشابه
  5. خاتمة

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

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


تعريف ArrayList

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

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

الطبقة ArrayList

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

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


ArrayList S1 = قائمة ArrayList جديدة() ؛ System.out.ln ("الحجم الأولي S1:" + S1.size ()) ؛ S1.add ( "T")؛ S1.add ( "C")؛ S1.add ( "H")؛ S1.add (1، "E")؛ System.out.ln ("بعد الإضافة ، يحتوي S1 على:" + S1) ؛ System.out.ln ("حجم S1 بعد الإضافة:" + S1.size ()) ؛ S1.remove ("T") ؛ S1.remove (2) ؛ System.out.ln ("بعد الحذف S1 يحتوي على:" + S1) ؛ System.out.ln ("حجم S1 بعد الحذف:" + S1.size ())؛ // OutputInitial حجم S1: 0 بعد الإضافة S1 يحتوي على:؛ حجم S1 بعد الإضافة: 4 بعد الحذف S1 يحتوي على: حجم S1 بعد الحذف: 2

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

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

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

ناقلات الطبقة

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

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

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

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

التشابه:

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

خاتمة:

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