Nah, Anda dapat membuat vektor di java juga - Vector v = new Vector(3, 2);
sgsi
Tidak pernah digunakan Vector, penggunaan ArrayListatau LinkedListatauArrayDeque
Jawaban:
365
Perbedaan
Vektor disinkronkan, ArrayLists tidak.
Metode Pertumbuhan Data
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.
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.
Bagaimana dengan MEMBACA dari ArrayList dengan cara multithreaded? Apakah itu aman?
Xunie
@Xunie Membaca dari ArrayList atau kelas koleksi lainnya tidak pernah menjadi masalah. Masalah muncul ketika Anda menambahkan atau menghapus atau mengubah nilai yang ada ke ArrayList atau koleksi.
sainath reddy
85
Seperti yang dikatakan dalam dokumentasi, a Vectordan a ArrayListhampir setara. Perbedaannya adalah bahwa akses ke a Vectordisinkronkan, sedangkan akses ke ArrayListtidak. Artinya, hanya satu utas yang dapat memanggil metode pada Vectorsuatu 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.synchronizedListberfungsi untuk membuat daftar yang disinkronkan, sehingga membuat Anda setara dengan Vector.
disinkronkan tetapi tidak threadsafe? apa artinya? [Saya pemula]
Dineshkumar
13
@Dineshkumar Vectoritu 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.
Bisakah Anda mendukung klaim dengan memberikan bukti 20-30% faster?
pengguna
5
@ Pengguna Pada saat itu hanya pengalaman pribadi dari clunking aroun array besar. Lebih dari tiga tahun sekarang, saya tidak bisa mengarahkan Anda ke apa yang saya bicarakan, tetapi ada banyak tolok ukur di luar sana. Tidak sampai threading di mana Anda melihat lompatan terbesar tetapi di sini adalah satu: javacodegeeks.com/2010/08/...
Oli
20-30% hanya cocok, jika Anda membaca DAN menulis ke Vector / Arraylist, karena fungsi pertumbuhan akan membuat dampak terbesar. Jika Anda memiliki tolok ukur yang hanya menulis sekali dan kemudian melakukan pembacaan hanya akan memberikan hasil yang berbeda
Tobi
2
Harap berikan bukti ke data Anda
wiredmark
Karena vektor disinkronkan dan arraylist tidak disinkronkan, itu mungkin menjadi alasan, arraylist lebih cepat daripada vektor.
MEMINTA
23
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:
Untuk mendapatkan elemen di lokasi tertentu dari Vector, kami menggunakan fungsi elementAt (int index). Nama fungsi ini sangat panjang. Di tempat ini di ArrayList kita mendapatkan (int index) yang sangat mudah diingat dan digunakan.
Demikian pula untuk mengganti elemen yang sudah ada dengan elemen baru dalam Vector, kami menggunakan metode setElementAt (), yang lagi-lagi sangat panjang dan dapat mengganggu programmer untuk menggunakan berulang kali. Di tempat ArrayList ini memiliki metode add (int index, object) yang mudah digunakan dan diingat. Seperti ini mereka memiliki lebih banyak nama programmer yang ramah dan mudah digunakan di ArrayList.
Kapan harus menggunakan yang mana?
Cobalah untuk menghindari penggunaan Vektor sepenuhnya. ArrayLists dapat melakukan semua yang dapat dilakukan oleh Vector. Lebih dari ArrayLists secara default tidak disinkronkan. Jika Anda mau, Anda bisa menyinkronkannya kapan pun Anda butuhkan dengan menggunakan Collections util class.
ArrayList mudah diingat dan menggunakan nama fungsi.
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.
Saya tidak mengerti bagaimana nama metode bisa menjadi kriteria untuk menggunakan atau tidak menggunakan metode itu.
Surender Kherwa
14
ArrayListdan Vectorkeduanya mengimplementasikan antarmuka Daftar dan mempertahankan urutan penyisipan. Tetapi ada banyak perbedaan antara ArrayListdan Vector...
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.
Vectormenggunakan antarmuka enumerasi untuk melintasi elemen. Tetapi bisa menggunakan Iterator juga.
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.
Mengapa menambahkan objek pada awalnya dan pada akhirnya di LinkedList lambat? Bukankah lebih cepat dari KEDUA arrayList dan vektor?
CHANist
@CHAN saya setuju juga. Menambahkan objek di awal dan akhir harus lebih cepat daripada menambahkan objek di tengahnya.
Rahul Rastogi
1
Bahasa yang digunakan di kolom LinkedList dari tabel ini kontradiktif. Baik prepending dan menambahkan ke LinkedList lebih cepat daripada menambahkan elemen di tengah, tetapi lebih lambat dari prepending atau menambahkan ke ArrayLists atau Vektor. Ini karena setiap penyisipan membutuhkan alokasi memori dengan referensi non-lokal, sehingga meningkatkan kemungkinan cache gagal. Meskipun pencarian dalam LinkedList adalah linier dengan jumlah elemen dan pointer ke ujungnya tidak disimpan, menambahkan masih lebih cepat daripada melakukan prabayar karena memori hanya dialokasikan kembali untuk satu elemen.
Vector v = new Vector(3, 2);
Vector
, penggunaanArrayList
atauLinkedList
atauArrayDeque
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.Referensi
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.
Referensi
sumber
Seperti yang dikatakan dalam dokumentasi, a
Vector
dan aArrayList
hampir setara. Perbedaannya adalah bahwa akses ke aVector
disinkronkan, sedangkan akses keArrayList
tidak. Artinya, hanya satu utas yang dapat memanggil metode padaVector
suatu waktu, dan ada sedikit overhead dalam memperoleh kunci; jika Anda menggunakanArrayList
, ini tidak terjadi. Secara umum, Anda ingin menggunakanArrayList
; 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 denganVector
.sumber
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
.sumber
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
sumber
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.
sumber
ArrayList
danVector
keduanya mengimplementasikan antarmuka Daftar dan mempertahankan urutan penyisipan. Tetapi ada banyak perbedaan antaraArrayList
danVector
...ArrayList -
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
sumber
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:
sumber