أمثلة التشغيل الأساسية
Vectorapp.Java
استيراد java.util.vector ؛ استيراد java.lang.*؛ استيراد java.util.enumeration ؛ الفئة العامة VectorApp {public static void main (String args []) {vector v1 = new Vector () ؛ integer integer1 = عدد صحيح جديد (1) ؛ // إضافة ككائن سلسلة v1.addelement ("واحد") ؛ // إضافة ككائن integer v1.AddElement (integer1) ؛ v1.AddElement (integer1) ؛ v1.AddElement ("اثنين") ؛ v1.AddElement (عدد صحيح جديد (2)) ؛ v1.AddElement (integer1) ؛ v1.AddElement (integer1) ؛ // تحويل إلى سلسلة وطباعة system.out.println ("المتجه V1 هو:/n/t"+v1) ؛ // أدخل كائنًا جديدًا إلى الموضع المحدد V1.inserTelement ("Three" ، 2) ؛ v1.InserTelement (تعويم جديد (3.9) ، 3) ؛ System.out.println ("The Vector v1 (user insertElementat () هو:/n/t)"+v1) ؛ // قم بتعيين الكائن في الموضع المحدد ككائن جديد // يتم تمديد الكائنات بعد الموضع المحدد في التسلسل v1.setElementat ("Four" ، 2) ؛ System.out.println ("The Vector v1 cused method setelmentat () is:/n/t"+v1) ؛ v1.removeElement (integer1) ؛ // حذف integer1 الكائن من كائن Vector V1 // نظرًا لوجود عدد صحيح متعدد ، ابدأ من نقطة الصفر. // العثور على حذف INTEGER1 الموجود. التعداد التعداد = v1.elements () ؛ System.out.println ("المتجه V1 (الطريقة المستخدمة removelememt () هي") ؛ بينما (enum.hasmoreElements ()) system.out.println (enum.nextelement ()+"") Object1 (من أعلى إلى botton): "+v1.indexof (integer1)) ؛ system.out.println (" موضع الكائن 1 (tottom-to-top): "+v1.lastindexof (integer1)) ؛ المتجه) هو: "+v1) ؛ // إعادة تعيين حجم V1 ، ويتم تجاهل العناصر الزائدة}}} نتائج التشغيل:
E:/java01> java vectorapp المتجه V1 هو: [واحد ، 1 ، 1 ، اثنان ، 2،1،1] المتجه V1 (الطريقة المستعملة الداخلية ()) هي: [واحد ، 1 ، ثلاثة ، V1 (الطريقة المستخدمة removelement ()) هي: واحد أربعة 3.9 1 2 1 1 موضع الكائن 1 (من أعلى إلى التون): 3 موضع الكائن 1 (botton إلى أعلى): 7 المتجه الجديد (تغيير حجم المتجه) هو: [واحد ، أربعة ، 3.9،1]
التوسع 1x في Vertor
تذكر ما إذا تم توسيع ArrayList إلى 0.5 أضعاف metaarray في كل مرة؟ يختلف المتجه قليلاً عن ArrayList عند إجراء عمليات توسيع السعة
COTERTINCREMENT المحمية المحمية ؛ // استخدم لتحديد القدرة على كل توسيع من الفراغ الخاص ينمو (int mincapacity) {// overflow-concious code int oldcapacity = elementData.Length ؛ int newCapacity = OldCapacity + ((COTERTINCREMENT> 0)؟ COURTINCREMENT: OLDCAPACITY) ؛ // إذا لم يتم تحديد السعة ، فإن قدرة التوسع الافتراضية هي سعة الصفيف الأصلي إذا (newCapacity - minicapacity <0) newCapacity = minicapacity ؛ if (newCapacity - max_array_size> 0) newCapacity = hugecapacity (mincapacity) ؛ elementData = arrays.copyof (elementData ، newCapacity) ؛}يمكن للأصدقاء المتذوقون أن يجدوا أن هناك متغيرًا إضافيًا للسعة في المتجه ، والذي يتم استخدامه لتحديد زيادة كل توسع. إذا لم يتم تحديد هذا المتغير ، فيمكنك أن تجد في النمو أن المتجه يوسع السعة بشكل افتراضي إلى 1 أضعاف الصفيف الأصلي.
السلامة الموضوع
Vertor هو موضوع آمن!
شيء آخر أكثر وضوحًا في رمز مصدر Vertor هو أن معظم الطرق لها كلمة رئيسية متزامنة. يعلم الجميع أن هذه الكلمة الرئيسية تستخدم لمزامنة مؤشرات الترابط ، وبالتالي فإن فئة المتجه آمنة مؤشرات الترابط!
ولكن حتى إذا تم تعديل جميع أساليبها لتكون متزامنة ، فهذا لا يعني أنه لا توجد حاجة للمزامنة عند تسميتها:
ناقل ثابت خاص <integer> متجه = ناقل جديد <integer> () ؛ الفراغ الثابت العام (سلسلة [] args) {بينما (صحيح) {for (int i = 0 ؛ i <10 ؛ i ++) {vector.add (i) ؛ } thread removethRead = new thread (new RunNable () {Override public void run () {for (int i = 0 ؛ i <vector.size () ؛ i ++) {vector.remove (i) ؛}}}) ؛ printTherThread = new thread (new RunNable () {Override public void run () {for (int i = 0 ؛ i <vector.size () ؛ i ++) {system.out.println (vector.get (i)) ؛}}}) ؛ removethread.start () ؛ printThRead.start () ؛ بينما (thread.activecount ()> 20) ؛ }}بعد تشغيل هذا الرمز لفترة قصيرة من الزمن ، ستجد استثناء ArrayIndExOutOfBoundSexception. على الرغم من أن طريقة GET وإزالة وحجم المتجه هنا لها تعديل متزامن ، في بيئة متعددة الخيوط ، إذا لم يتم اتخاذ تدابير مزامنة إضافية في جانب الطريقة ، فإن هذا الرمز لا يزال غير آمن. إذا حذف مؤشر ترابط العنصر بالرقم التسلسلي I ، ويصل مؤشر ترابط آخر إلى هذا الأمر ، فسيقوم بإلقاء الاستثناء مباشرة. لذلك ، لضمان سلامة هذا الرمز ، يتطلب أيضًا إضافة التعديل المتزامن إلى التشغيل.