Apa perbedaan antara dua struktur data ArrayList dan Vector , dan di mana Anda harus menggunakan masing-masing?
Vector v = new Vector(3, 2);
Apa perbedaan antara dua struktur data ArrayList dan Vector , dan di mana Anda harus menggunakan masing-masing?
Vector v = new Vector(3, 2);
Jawaban:
Perbedaan
Gunakan ArrayLists jika tidak ada persyaratan khusus untuk menggunakan Vektor.
Sinkronisasi
Jika beberapa utas mengakses ArrayList secara bersamaan, maka kita harus menyinkronkan secara eksternal blok kode yang memodifikasi daftar baik secara struktural atau hanya memodifikasi suatu elemen. Modifikasi struktural berarti penambahan atau penghapusan elemen dari daftar. Pengaturan nilai elemen yang ada bukanlah modifikasi struktural.
Collections.synchronizedList
biasanya digunakan pada saat pembuatan daftar untuk menghindari akses tidak disinkronkan tidak disengaja ke daftar.
Pertumbuhan data
Secara internal, ArrayList dan Vector memegang konten mereka menggunakan Array. Ketika sebuah elemen dimasukkan ke dalam ArrayList atau Vektor, objek perlu memperluas array internal jika kehabisan ruang. A Vector default untuk menggandakan ukuran array, sedangkan ArrayList meningkatkan ukuran array sebesar 50 persen.
Seperti yang dikatakan dalam dokumentasi, a Vector
dan a ArrayList
hampir setara. Perbedaannya adalah bahwa akses ke a Vector
disinkronkan, sedangkan akses ke ArrayList
tidak. Artinya, hanya satu utas yang dapat memanggil metode pada Vector
suatu waktu, dan ada sedikit overhead dalam memperoleh kunci; jika Anda menggunakan ArrayList
, ini tidak terjadi. Secara umum, Anda ingin menggunakan ArrayList
; dalam kasing tunggal itu pilihan yang lebih baik, dan kasing multi-ulir, Anda mendapatkan kontrol yang lebih baik atas penguncian. Ingin mengizinkan bacaan bersamaan? Baik. Ingin melakukan satu sinkronisasi untuk sepuluh penulisan? Juga baik-baik saja. Memang membutuhkan sedikit lebih banyak perawatan pada Anda, tetapi kemungkinan apa yang Anda inginkan. Perhatikan juga bahwa jika Anda memiliki ArrayList, Anda dapat menggunakanCollections.synchronizedList
berfungsi untuk membuat daftar yang disinkronkan, sehingga membuat Anda setara dengan Vector
.
Vector
adalah kelas rusak yang bukan threadsafe, meskipun sedang "disinkronkan" dan hanya digunakan oleh siswa dan pemrogram berpengalaman lainnya.
ArrayList
adalah implementasi daftar masuk yang digunakan oleh para profesional dan pemrogram berpengalaman.
Profesional yang menginginkan implementasi Threadsafe List menggunakan a CopyOnWriteArrayList
.
Vector
itu dimaksudkan untuk menjadi benang, namun memiliki cacat desain yang membuatnya * tidak sebenarnya thread, Ini pada dasarnya adalah kelas ditinggalkan. Untuk beberapa alasan, universitas dll belum pernah mendengar tentang berita ini dan masih menganjurkan penggunaannya.
ArrayList
lebih baru dan 20-30% lebih cepat.
Jika Anda tidak membutuhkan sesuatu yang terlihat jelas Vector
, gunakanArrayList
20-30% faster
?
Ada 2 perbedaan utama antara Vector dan ArrayList.
Vektor disinkronkan secara default, dan ArrayList tidak. Catatan: Anda dapat membuat ArrayList juga disinkronkan dengan mengirimkan objek arraylist ke metode Collections.synchronizedList (). Berarti disinkronkan: dapat digunakan dengan banyak utas tanpa efek samping apa pun.
ArrayLists tumbuh sebesar 50% dari ukuran sebelumnya ketika ruang tidak cukup untuk elemen baru, sedangkan Vector akan tumbuh sebesar 100% dari ukuran sebelumnya ketika tidak ada ruang untuk elemen baru yang masuk.
Selain ini, ada beberapa perbedaan praktis di antara mereka, dalam hal upaya pemrograman:
Kapan harus menggunakan yang mana?
Catatan : meskipun arraylist bertambah 100%, Anda dapat menghindari ini dengan metode ensurecapacity () untuk memastikan bahwa Anda mengalokasikan memori yang cukup pada tahap awal itu sendiri.
Semoga ini bisa membantu.
ArrayList
dan Vector
keduanya mengimplementasikan antarmuka Daftar dan mempertahankan urutan penyisipan. Tetapi ada banyak perbedaan antara ArrayList
dan Vector
...
ArrayList
tidak disinkronkan.ArrayList
bertambah 50% dari ukuran array saat ini jika jumlah elemen melebihi kapasitasnya.ArrayList
bukan kelas warisan, ini diperkenalkan di JDK 1.2.ArrayList
cepat karena tidak disinkronkan.ArrayList
menggunakan antarmuka Iterator untuk melintasi elemen.Vektor -
Vector
disinkronkan.Vector
kenaikan 100% berarti menggandakan ukuran array jika jumlah elemen melebihi kapasitasnya.Vector
adalah kelas warisan.
Vector
lambat karena disinkronkan yaitu dalam lingkungan multithreading, itu akan menahan utas lainnya dalam keadaan runnable atau non-runnable sampai utas saat ini melepaskan kunci objek.
Vector
menggunakan antarmuka enumerasi untuk melintasi elemen. Tetapi bisa menggunakan Iterator juga.
Lihat Juga: https://www.javatpoint.com/difference-between-arraylist-and-vector
Pada dasarnya ArrayList dan Vector keduanya menggunakan Object Array internal.
ArrayList: Kelas ArrayList memperluas AbstractList dan mengimplementasikan antarmuka Daftar dan RandomAccess (antarmuka penanda). ArrayList mendukung array dinamis yang dapat tumbuh sesuai kebutuhan. Ini memberi kita iterasi pertama atas elemen. ArrayList menggunakan Object Array internal; mereka dibuat dengan ukuran awal default 10. Ketika ukuran ini terlampaui, koleksi secara otomatis meningkat menjadi setengah dari ukuran default yaitu 15.
Vektor: Vektor mirip dengan ArrayList tetapi perbedaannya adalah, disinkronkan dan ukuran awal default adalah 10 dan ketika ukurannya melebihi ukurannya meningkat dua kali lipat dari ukuran aslinya yang berarti ukuran baru akan menjadi 20. Vektor adalah satu-satunya kelas selain ArrayList untuk mengimplementasikan RandomAccess. Vektor memiliki empat konstruktor dari yang satu mengambil dua parameter Vector (kapasitas inisialisasi, kapasitas int). Peningkatan adalah jumlah dengan mana kapasitas meningkat ketika vektor meluap, sehingga memiliki kontrol lebih besar atas faktor beban.
Beberapa perbedaan lainnya adalah: