CodeGym /Java Blog /Acak /Vektor Jawa
John Squirrels
Level 41
San Francisco

Vektor Jawa

Dipublikasikan di grup Acak
Mungkin Anda pernah menemukan array di Java, dan Anda tahu bahwa salah satu kelemahan utamanya adalah keteguhan ukuran. Setelah Anda membuat larik dengan ukuran tertentu, Anda tidak dapat mengubahnya nanti. Ada beberapa kelas framework Java Collection dalam bahasa Java yang memecahkan masalah ini. Salah satunya adalah Java Vector Class. Ini akan dibahas dalam artikel ini.

Apa itu Kelas Vektor

Seperti yang kami tulis di kata pengantar, kelas Vector dari Java Collection Framework menghilangkan masalah ukuran statis array. Java Vector adalah sejenis array dinamis dan dapat tumbuh atau menyusut ukurannya. Dengan menggunakan kelas koleksi Vector , kita dapat menyimpan sekelompok elemen sebagai objek sederhana dan memanipulasinya melalui berbagai metode. Kelas Vector tersedia dari paket java.util . Dengan demikian, Vector di Java dapat digunakan jika Anda tidak mengetahui ukuran array sebelumnya, atau jika Anda membutuhkan "array" yang dapat mengubah dimensi selama masa program. Harus segera dikatakan bahwa Vectorkelas sudah cukup tua, dan kemudian muncul koleksi yang dapat menggantikannya di sebagian besar kasus. “Analog” populer dari Java Vector adalah kelas ArrayList . Perbedaan paling penting antara kelas-kelas ini satu sama lain adalah bahwa Vector disinkronkan, sedangkan ArrayList tidak. Kami akan berbicara tentang perbedaan lain antara kedua kelas ini dan analog yang lebih modern dari kelas Vektor nanti di bagian "Apa yang salah dengan kelas Vektor".

Metode Vektor Java

Berikut adalah Metode Vektor Java :
  • void add(int index, Object element) menyisipkan elemen yang ditentukan pada posisi vektor yang ditentukan.

  • boolean add(Object o) menambahkan elemen yang ditentukan ke akhir vektor.

  • boolean addAll(Collection c) menambahkan semua elemen dalam koleksi yang ditentukan ke akhir vektor, agar dikembalikan oleh iterator koleksi yang ditentukan.

  • boolean addAll(int index, Collection c) menyisipkan semua elemen dalam Collection yang ditentukan ke dalam vektor pada posisi yang ditentukan.

  • void addElement(Object obj) menambahkan komponen yang ditentukan ke akhir vektor ini, menambah ukurannya satu per satu.

  • int capacity() mengembalikan kapasitas saat ini dari vektor ini.

  • void clear() menghapus semua elemen dari vektor ini.

  • Object clone() mengembalikan tiruan dari vektor ini.

  • boolean berisi (Elem objek) menguji apakah objek yang ditentukan merupakan komponen dalam vektor ini.

  • boolean containsAll(Collection c) mengembalikan nilai true jika vektor berisi semua elemen dari Collection yang ditentukan.

  • void copyInto(Object[] anArray) menyalin komponen vektor ini ke array yang ditentukan.

  • Object elementAt(int index) mengembalikan komponen pada indeks yang ditentukan.

  • Elemen pencacahan() mengembalikan pencacahan komponen vektor ini.

  • void sureCapacity(int minCapacity) meningkatkan kapasitas vektor ini, jika perlu, untuk memastikan bahwa ia dapat menampung setidaknya jumlah komponen yang diberikan oleh argumen kapasitas minimum.

  • boolean equals(Object o) membandingkan objek yang ditentukan dengan vektor ini.

  • Objek firstElement() mengembalikan komponen pertama (elemen pada indeks 0) dari vektor ini.

  • Objek get(int index) mengembalikan elemen pada posisi yang ditentukan dalam vektor ini.

  • int hashCode() mengembalikan nilai kode hash untuk vektor ini.

  • int indexOf(Object elem) mencari kejadian pertama dari argumen yang diberikan, menguji kesetaraan menggunakan metode equals.

  • int indexOf(Object elem, int index) mencari kejadian pertama dari argumen yang diberikan, mulai dari indeks, dan menguji kesetaraan menggunakan metode equals.

  • void insertElementAt(Object obj, int index) menyisipkan objek yang ditentukan sebagai komponen ke dalam vektor ini pada indeks yang ditentukan.

  • boolean isEmpty() menguji vektor ini untuk komponen yang hilang.

  • Objek lastElement() mengembalikan komponen terakhir dari vektor.

  • int lastIndexOf(Object elem) mengembalikan indeks kejadian terakhir dari objek yang ditentukan dalam vektor ini.

  • int lastIndexOf(Object elem, int index) mencari mundur untuk objek yang ditentukan, mulai dari indeks yang ditentukan, dan mengembalikan indeks ke sana.

  • Hapus objek (indeks int) menghapus elemen pada posisi yang ditentukan dalam vektor ini.

  • boolean remove(Object o) menghapus kejadian pertama dari elemen yang ditentukan dalam vektor ini. Jika vektor tidak mengandung elemen, itu tidak berubah.

  • boolean removeAll(Collection c) menghapus semua elemen dari vektor yang terkandung dalam Koleksi yang ditentukan.

  • void removeAllElements() menghapus semua komponen dari vektor dan mengatur ukurannya menjadi nol.

  • boolean removeElement(Object obj) menghapus kemunculan argumen pertama (indeks terendah) dari vektor ini.

  • void removeElementAt(int index) menghapus elemen pada indeks.

  • protected void removeRange(int fromIndex, int toIndex) menghapus dari Daftar ini semua elemen yang indeksnya antara fromIndex, inklusif, dan toIndex, secara eksklusif.

  • boolean retainAll(Collection c) hanya menyimpan elemen dalam vektor yang terkandung dalam Collection yang ditentukan.

  • Kumpulan objek(indeks int, elemen Objek) menggantikan elemen pada posisi yang ditentukan dalam vektor ini dengan elemen yang ditentukan.

  • void setElementAt(Object obj, int index) menyetel komponen pada indeks yang ditentukan dari vektor ini sebagai objek yang diberikan.

  • void setSize(int newSize) mengatur ukuran vektor ini.

  • int size() mengembalikan jumlah komponen dalam vektor ini.

  • Daftar subList(int fromIndex, int toIndex) mengembalikan representasi (tampilan) dari bagian Daftar ini antara fromIndex, inklusif, dan toIndex, secara eksklusif.

  • Object[] toArray() mengembalikan array yang berisi semua elemen vektor ini dalam urutan yang benar.

  • Object[] toArray(Object[] a) mengembalikan array yang berisi semua elemen vektor ini dalam urutan yang benar; tipe eksekusi dari array yang dikembalikan adalah tipe dari array yang ditentukan.

  • String toString() mengembalikan representasi string dari vektor ini yang berisi representasi string dari setiap elemen.

  • void trimToSize() memangkas kapasitas vektor ini ke ukuran vektor saat ini.

Contoh Vektor Jawa


import java.util.Vector;

public class VectorExample {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       //adding some vector elements
       vector.add("Johnny");
       vector.add("Ivy");
       vector.add("Ricky");
       System.out.println(vector); 
       
       //adding more vector elements       
       vector.add("Johnny");
       vector.add("Paul");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Johnny"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Johnny", 1));
       vector.clear(); //deleting all vector elements
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
Output dari program ini ada di bawah ini:
ukuran vektor kosong = 0 [Johnny, Ivy, Ricky] [Johnny, Ivy, Ricky, Johnny, Paul] ukuran vektor = 5 elemen vektor pertama = Johnny 0 3 ukuran vektor setelah clear metode = 0

Apa yang salah dengan Kelas Vektor?

Menurut dokumentasi kelas Java Vector , jika Anda tidak memerlukan implementasi thread-safe dalam program Anda, disarankan untuk menggunakan ArrayList sebagai pengganti Vector (Collection Framework peserta yang lebih efektif). Mari ubah sedikit contoh di atas, menggunakan kelas ArrayList sebagai ganti Vector .

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {

       public static void main(String[] args) {
           List vector = new ArrayList();
           //Vector vector = new Vector();
           System.out.println("the size of the empty vector = " +  vector.size());
           vector.add("Johnny");
           vector.add("Ivy");
           vector.add("Ricky");
           System.out.println(vector);
           vector.add("Johnny");
           vector.add("Paul");
           System.out.println(vector);
           System.out.println("the size of the vector = " +  vector.size());
           //System.out.println("the first element of the vector = " + vector.firstElement());

           //here the program will print out the first appearance of "Johnny" element
           System.out.println(vector.indexOf("Johnny"));
           //program will print out the first appearance of "Johnny" element starting from the element 1
           //System.out.println(vector.indexOf("Johnny", 1));
           vector.clear();
           System.out.println("the size of the vector after clear method = " +  vector.size());

       }
   }
Kami mengomentari baris dengan vector.indexOf("Johnny", 1) , karena tidak ada metode seperti itu dalam variasi ini di kelas ArrayList . Untuk alasan yang sama, baris vector.firstElement() dikomentari. Dalam semua hal lainnya, program menghasilkan hasil yang sama seperti yang pertama. Tentu saja, dalam contoh seperti itu, tidak jelas mengapa ArrayList lebih baik daripada Vector . Ini membutuhkan lebih banyak pengetahuan tentang, katakanlah, utas. Kami mencantumkan alasannya di sini. Pertama, meskipun kelas Vector disinkronkan, itu tidak dapat disebut sepenuhnya aman untuk thread, meskipun ini tampak aneh. Faktanya adalah Vector menyinkronkan setiap operasi, bukan keseluruhan Vectorcontoh itu sendiri. Ini bisa menjadi masalah dalam program di mana Anda perlu menyinkronkan seluruh rangkaian operasi daripada operasi individual. Katakanlah, jika satu utas mengulang vektor dan utas lainnya secara struktural memodifikasi instance vektor, iterator akan melontarkan ConcurrentModificationException . Ternyata dua utas dapat bekerja dengan instance Vector secara bersamaan jika mereka melakukan operasi yang berbeda. Kedua, Vektorkelas tidak memiliki kinerja terbaik karena objeknya memiliki larik dan sinkronisasi yang dapat diubah ukurannya. Kombinasi ini berarti overhead tambahan untuk operasi pemblokiran, baik sinkronisasi diperlukan atau tidak. Tentu, ini memengaruhi kinerja. Selain itu, menyinkronkan vektor pada setiap operasi juga berdampak negatif pada kinerja, karena kami akan memperoleh kunci berulang kali untuk setiap operasi. Jika seluruh instance kelas disinkronkan, kunci juga akan diperoleh satu kali, yang jauh lebih efisien. Ketiga, Vector mendukung beberapa metode lama. Misalnya elemen(). Metode ini mengembalikan pencacahan komponen vektor. Pemrogram paling sering menggunakan Iterator atau ListIterator untuk Pencacahan, dan untuk beberapa alasan. Secara khusus, Pencacahan tidak memiliki metode remove() yang ditentukan, yang berarti bahwa daftar tidak dapat dimodifikasi secara struktural selama iterasi. Juga, tidak seperti ListIterator, Pencacahan tidak menawarkan akses dua arah. Seperti yang Anda lihat, Vector memiliki beberapa masalah. Bagaimana jika Anda masih membutuhkan implementasi antarmuka Daftar yang aman untuk thread? Dalam hal ini, ArrayList tidak akan membantu, tetapi Anda dapat menggunakan, misalnya, kelas CopyOnWriteArrayList sebagai ganti Vector ; itu diposisikan sebagai varian thread-safe dari ArrayList. Anda juga dapat menyinkronkan ArrayList menggunakan metode Koleksi yang disinkronkanList() .

Vektor memang memiliki beberapa masalah ... mengapa masih di Jawa dan mengapa harus diajarkan?

Timbul pertanyaan: mengapa kita mempelajari kelas Vector ? Dan mengapa belum dihapus dari Jawa? Faktanya adalah bahwa Java menganut prinsip kompatibilitas ke belakang. Ini berarti bahwa semua kode lama yang ditulis bertahun-tahun yang lalu akan dipahami oleh Java versi modern. Selain itu, ada cukup banyak aplikasi tingkat perusahaan di lingkungan Java yang telah didukung selama beberapa dekade. Sangat mungkin Anda harus berurusan dengan "dinosaurus" seperti itu dalam pekerjaan Anda, jadi Anda harus siap menghadapi kejutan, seperti kode dengan kelas warisan yang tidak efektif.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION