ตัวอย่างการดำเนินงานพื้นฐาน
VectorApp.java
นำเข้า java.util.vector; นำเข้า Java.lang.*; นำเข้า Java.util.enumeration; Public Class VectorApp {โมฆะคงที่สาธารณะหลัก (สตริง args []) {เวกเตอร์ v1 = เวกเตอร์ใหม่ (); จำนวนเต็มจำนวนเต็ม 1 = จำนวนเต็มใหม่ (1); // เพิ่มเป็นวัตถุสตริง v1.addelement ("หนึ่ง"); // เพิ่มเป็นวัตถุจำนวนเต็ม v1.addelement (Integer1); v1.addelement (Integer1); v1.addelement ("สอง"); v1.addelement (จำนวนเต็มใหม่ (2)); v1.addelement (Integer1); v1.addelement (Integer1); // แปลงเป็นสตริงและระบบพิมพ์. out.println ("เวกเตอร์ v1 คือ:/n/t"+v1); // แทรกวัตถุใหม่ไปยังตำแหน่งที่ระบุ V1.inSertElement ("สาม", 2); V1.inSertElement (Float ใหม่ (3.9), 3); System.out.println ("The Vector V1 (ใช้วิธีการที่ใช้ในการแทรก () คือ:/n/t)"+v1); // ตั้งค่าวัตถุที่ตำแหน่งที่ระบุเป็นวัตถุใหม่ // วัตถุหลังจากตำแหน่งที่ระบุจะถูกขยายในลำดับ v1.setElementat ("สี่", 2); System.out.println ("เวกเตอร์ v1 cused method setelmentat () คือ:/n/t"+v1); v1.removeelement (Integer1); // ลบวัตถุ Integer1 ออกจากวัตถุเวกเตอร์ V1 // เนื่องจากมี integer1 หลายตัวเริ่มต้นจากศูนย์ // ค้นหาเพื่อลบจำนวนเต็ม 1 ที่พบแรก การแจงนับ enum = v1.elements (); System.out.println ("เวกเตอร์ V1 (ใช้วิธีการ removeElemEmt () คือ"); ในขณะที่ (enum.hasmoreElements ()) System.out.println (enum.nextelement ()+""); system.out.println (); Object1 (จากบนถึง-botton): "+v1.indexof (integer1)); system.out.println (" ตำแหน่งของ Object1 (tottom-to-top): "+v1.lastindexof (integer1)); // ค้นหาตำแหน่ง เวกเตอร์) คือ: "+v1); // รีเซ็ตขนาดของ V1 และองค์ประกอบส่วนเกินจะถูกยกเลิก}} ผลการทำงาน:
E:/Java01> Java VectorApp เวกเตอร์ V1 คือ: [หนึ่ง, 1,1, สอง, 2,1,1] เวกเตอร์ V1 (ใช้วิธีการใช้วิธีการ ()) คือ: [หนึ่ง, 1, สาม, 3.9,1, สอง, 2,1,1] เวกเตอร์ V1 V1 (ใช้วิธีการ remverelement ()) คือ: หนึ่งสี่ 3.9 1 สอง 2 1 1 ตำแหน่งของ Object1 (บน-ถึง-botton): 3 ตำแหน่งของ Object1 (Botton-to-top): 7 เวกเตอร์ใหม่ (ปรับขนาดเวกเตอร์) คือ: [หนึ่ง, สี่, 3.9,1]
การขยายตัว 1x ของ Vertor
โปรดจำไว้ว่าถ้า ArrayList ขยายเป็น 0.5 เท่าของ MetaArray ในแต่ละครั้งหรือไม่? เวกเตอร์แตกต่างจาก ArrayList เล็กน้อยเมื่อทำการขยายกำลังการผลิต
ความสามารถในการป้องกัน int ที่ได้รับการป้องกัน; // ใช้เพื่อระบุความสามารถสำหรับการขยายช่องว่างส่วนตัวแต่ละครั้ง (int mincapacity) {// รหัสที่ใส่ใจล้น int oldcapacity = elementData.length; int newCapacity = oldCapacity + ((ความสามารถในการผลิต> 0)? ความสามารถในการผลิต: ความเป็นไปได้); // หากไม่ได้ระบุความสามารถในการขยายความสามารถในการขยายกำลังการผลิตเริ่มต้นคือความจุของอาร์เรย์ดั้งเดิมถ้า if (newCapacity - max_array_size> 0) newcapacity = hugecapacity (mincapacity); elementData = arrays.copyof (ElementData, newCapacity);}เพื่อนที่ระมัดระวังสามารถพบว่ามีตัวแปรความสามารถเพิ่มเติมในเวกเตอร์ซึ่งใช้เพื่อระบุการเพิ่มขึ้นของการขยายแต่ละครั้ง หากไม่ได้ระบุตัวแปรนี้คุณสามารถค้นหาได้ในการเติบโตที่เวกเตอร์ขยายกำลังการผลิตโดยค่าเริ่มต้นเป็น 1 เท่าของอาร์เรย์ดั้งเดิม
ความปลอดภัยด้าย
Vertor คือ Thread Safe!
อีกสิ่งที่ชัดเจนยิ่งขึ้นในซอร์สโค้ด Vertor คือวิธีการส่วนใหญ่มีคำหลักที่ซิงโครไนซ์ ทุกคนรู้ว่าคำหลักนี้ใช้สำหรับการซิงโครไนซ์เธรดดังนั้นคลาสเวกเตอร์จึงเป็นเธรดที่ปลอดภัย!
แต่ถึงแม้ว่าวิธีการทั้งหมดของมันจะได้รับการแก้ไขให้เป็นซิงโครนัส แต่ก็ไม่ได้หมายความว่าไม่จำเป็นต้องมีการซิงโครไนซ์เมื่อเรียกมันว่า:
เวกเตอร์คงที่ส่วนตัว <Integer> เวกเตอร์ = เวกเตอร์ใหม่ <Integer> (); โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ในขณะที่ (จริง) {สำหรับ (int i = 0; i <10; i ++) {vector.add (i); } เธรด removeThread = เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะเรียกใช้ () {สำหรับ (int i = 0; i <vector.size (); i ++) {vector.remove (i);}}}); เธรด printThread = เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะเรียกใช้ () {สำหรับ (int i = 0; i <vector.size (); i ++) {system.out.println (vector.get (i));}}}); RemovetHread.start (); printthread.start (); ในขณะที่ (thread.activecount ()> 20); -หลังจากเรียกใช้รหัสนี้ในช่วงเวลาสั้น ๆ คุณจะพบข้อยกเว้น ArrayIndExOutOfBoundSexception แม้ว่าวิธีการ Get, Remove และ Size ของเวกเตอร์ที่นี่มีการปรับเปลี่ยนการซิงโครไนซ์ในสภาพแวดล้อมแบบมัลติเธรดหากไม่มีมาตรการการซิงโครไนซ์เพิ่มเติมที่ด้านวิธีโค้ดนี้ยังไม่ปลอดภัย หากเธรดหนึ่งลบองค์ประกอบด้วยหมายเลขซีเรียล I และเธรดอื่นเข้าถึงฉันได้มันจะโยนข้อยกเว้นโดยตรง ดังนั้นเพื่อให้แน่ใจว่าความปลอดภัยของรหัสนี้จึงจำเป็นต้องมีการปรับเปลี่ยนการซิงโครไนซ์เพื่อเรียกใช้