Contoh operasi dasar
Vectorapp.java
impor java.util.vector; impor java.lang.*; impor java.util.enumeration; kelas publik vektorapp {public static void main (string args []) {vector v1 = vector baru (); Integer integer1 = integer baru (1); // tambahkan sebagai objek string v1.addelement ("satu"); // tambahkan sebagai objek integer v1.addelement (integer1); v1.addelement (integer1); v1.addelement ("dua"); v1.addelement (integer baru (2)); v1.addelement (integer1); v1.addelement (integer1); // Konversi ke string dan cetak system.out.println ("Vektor v1 adalah:/n/t"+v1); // Masukkan objek baru ke posisi yang ditentukan v1.insertelement ("tiga", 2); v1.insertelement (float baru (3.9), 3); System.out.println ("Vektor V1 (Metode yang Digunakan InsertElementAt () adalah:/n/t)"+v1); // Atur objek pada posisi yang ditentukan sebagai objek baru // objek setelah posisi yang ditentukan diperluas dalam urutan v1.setElementat ("empat", 2); System.out.println ("Vektor V1 Metode cused setelmentat () adalah:/n/t"+v1); v1.removeelement (integer1); // Hapus objek integer1 dari objek vektor v1 // karena ada beberapa integer1, mulai dari awal. // Temukan untuk menghapus integer1 pertama yang ditemukan. Enumeration enum = v1.elements (); System.out.println ("Vektor V1 (metode yang digunakan RemestElememt () adalah"); while (enum.hasmoreElements ()) system.out.println (enum.nextelement ()+""); System.Out.Println (); Gunakan metode Kelas enumerasi (enumerasi) untuk masing -masing. Object1 (top-to-botton): "+v1.indexof (integer1)); System.out.println (" Posisi Object1 (Tottom-to-Top): "+V1.LastIndexOf (Integer1); // Cari posisi di mana objek Integer1 berada dalam arah diferensi v1.setsize (4); vektor) adalah: "+v1); // Setel ulang ukuran V1, dan kelebihan elemen dibuang}} Hasil Menjalankan:
E:/java01> java vectorapp Vektor v1 adalah: [satu, 1,1, dua, 2,1,1] Vektor V1 (metode yang digunakan insertElementat ()) adalah: [satu, 1, tiga, 3,9,1, dua, 2,1] Vektor V1 (setelementat metode yang digunakan adalah: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, V1 (Metode yang Digunakan RemestElement ()) adalah: satu empat 3,9 1 dua 2 1 1 Posisi Object1 (top-to-botton): 3 Posisi Object1 (Botton-to-Top): 7 Vektor baru (mengubah ukuran vektor) adalah: [satu, empat, 3,9,1]
Ekspansi 1x Vertor
Ingat jika ArrayList diperluas ke 0,5 kali metaarray setiap kali? Vektor sedikit berbeda dari arraylist saat melakukan operasi ekspansi kapasitas
Kapasitas int yang dilindungi; // Gunakan untuk menentukan kapasitas untuk setiap ekspansi void grow (int mincapacity) {// overflow-conscious code int oldcapacity = elementData.length; int newcapacity = oldcapacity + ((kapasitas contincrement> 0)? kapasitas increment: oldcapacity); // Jika kapasitas tidak ditentukan, kapasitas ekspansi kapasitas default adalah kapasitas array asli jika (newcapacity - mincapacity <0) newcapacity = mincapacity; if (newcapacity - max_array_size> 0) newcapacity = hugeCapacity (mintcapacity); elementData = arrays.copyof (elementData, newcapacity);}Teman yang cermat dapat menemukan bahwa ada variabel kapasitas tambahan dalam vektor, yang digunakan untuk menentukan peningkatan setiap ekspansi. Jika variabel ini tidak ditentukan, Anda dapat menemukan dalam pertumbuhan bahwa vektor memperluas kapasitas secara default menjadi 1 kali array asli.
Keamanan utas
Vertor adalah utas aman!
Hal lain yang lebih mencolok dalam kode sumber Vertor adalah bahwa sebagian besar metode memiliki kata kunci yang disinkronkan. Semua orang tahu bahwa kata kunci ini digunakan untuk sinkronisasi utas, sehingga kelas vektor aman-utas!
Tetapi bahkan jika semua metode dimodifikasi menjadi sinkron, itu tidak berarti bahwa tidak perlu sinkronisasi saat menyebutnya:
vektor statis pribadi <integer> vector = vektor baru <integer> (); public static void main (string [] args) {while (true) {for (int i = 0; i <10; i ++) {vector.add (i); } Thread removethread = utas baru (runnable baru () {@Override public void run () {for (int i = 0; i <vector.size (); i ++) {vector.remove (i);}}}); Thread printThread = utas baru (runnable baru () {@Override public void run () {for (int i = 0; i <vector.size (); i ++) {System.out.println (vector.get (i));}}}); Removethread.start (); printThread.start (); while (thread.activeCount ()> 20); }}Setelah menjalankan kode ini untuk waktu yang singkat, Anda akan menemukan pengecualian ArrayIndexoutOfBoundSException. Meskipun metode vektor GET, Reme, dan ukuran di sini memiliki modifikasi yang disinkronkan, di lingkungan multi-utas, jika tidak ada langkah sinkronisasi tambahan yang diambil di sisi metode, kode ini masih tidak aman. Jika satu utas menghapus elemen dengan nomor seri I, dan utas lain mengakses ini saya, itu akan langsung melempar pengecualian. Oleh karena itu, untuk memastikan keamanan kode ini, ia juga membutuhkan modifikasi yang disinkronkan untuk ditambahkan untuk dijalankan.