T: Vector atau ArrayList - mana yang lebih baik dan mengapa?
J: Terkadang Vector
lebih baik; terkadang ArrayList
lebih baik; terkadang Anda juga tidak ingin menggunakannya. Saya harap Anda tidak mencari jawaban yang mudah karena jawabannya tergantung pada apa yang Anda lakukan. Ada empat faktor yang perlu dipertimbangkan:
- API
- Sinkronisasi
- Pertumbuhan data
- Pola penggunaan
Mari kita jelajahi masing-masing secara bergiliran.
API
Dalam The Java Programming Language (Addison-Wesley, Juni 2000) Ken Arnold, James Gosling, dan David Holmes menggambarkannya Vector
sebagai analog ke ArrayList
. Jadi, dari perspektif API, kedua kelas tersebut sangat mirip. Namun, masih ada beberapa perbedaan utama antara kedua kelas tersebut.
Sinkronisasi
Vectors
disinkronkan. Metode apa pun yang menyentuh Vector
konten adalah thread safe. ArrayList
, di sisi lain, tidak tersinkronisasi, sehingga tidak aman untuk thread. Dengan perbedaan tersebut, penggunaan sinkronisasi akan berdampak buruk pada performa. Jadi jika Anda tidak membutuhkan koleksi thread-safe, gunakan file ArrayList
. Mengapa membayar harga sinkronisasi secara tidak perlu?
Pertumbuhan data
Secara internal, baik itu ArrayList
dan Vector
pegang isinya menggunakan Array
. Anda perlu mengingat fakta ini saat menggunakan salah satu dari program Anda. Saat Anda memasukkan elemen ke dalam ArrayList
atau a Vector
, objek perlu memperluas larik internalnya jika kehabisan ruangan. A Vector
default untuk menggandakan ukuran arraynya, sedangkan fileArrayList
meningkatkan ukuran lariknya sebesar 50 persen. Bergantung pada bagaimana Anda menggunakan kelas-kelas ini, pada akhirnya Anda bisa mendapatkan kinerja yang besar saat menambahkan elemen baru. Itu selalu yang terbaik untuk mengatur kapasitas awal objek ke kapasitas terbesar yang akan dibutuhkan program Anda. Dengan mengatur kapasitas secara hati-hati, Anda dapat menghindari pembayaran penalti yang diperlukan untuk mengubah ukuran array internal nanti. Jika Anda tidak tahu berapa banyak data yang akan Anda miliki, tetapi Anda mengetahui laju pertumbuhannya, Vector
memang memiliki sedikit keuntungan karena Anda dapat menetapkan nilai kenaikan.
Pola penggunaan
Baik ArrayList
dan Vector
baik untuk mengambil elemen dari posisi tertentu dalam penampung atau untuk menambah dan menghapus elemen dari ujung penampung. Semua operasi ini dapat dilakukan dalam waktu konstan - O (1) . Namun, menambah dan menghapus elemen dari posisi lain terbukti lebih mahal - linear tepatnya: O (ni), di mana n adalah jumlah elemen dan i adalah indeks elemen yang ditambahkan atau dihilangkan. Operasi ini lebih mahal karena Anda harus menggeser semua elemen pada indeks i dan lebih tinggi sebanyak satu elemen. Jadi apa artinya semua ini?
Artinya, jika Anda ingin mengindeks elemen atau menambah dan menghapus elemen di akhir larik, gunakan a Vector
atau ArrayList
. Jika Anda ingin melakukan hal lain pada isinya, carilah kelas kontainer lain untuk diri Anda sendiri. Misalnya, LinkedList
dapat menambah atau menghapus elemen di posisi mana pun dalam waktu konstan - O (1). Namun, mengindeks elemen sedikit lebih lambat - O (i) di mana i adalah indeks elemen. Melintasi ArrayList
juga lebih mudah karena Anda cukup menggunakan indeks daripada harus membuat iterator. Ini LinkedList
juga membuat objek internal untuk setiap elemen yang disisipkan. Jadi, Anda harus waspada terhadap sampah tambahan yang sedang dibuat.
Terakhir, dalam "PRAXIS 41" dari Practical Java (Addison-Wesley, Feb. 2000) Peter Haggar menyarankan agar Anda menggunakan larik lama sebagai pengganti salah satu Vector
atau ArrayList
- terutama untuk kode kinerja-kritis. Dengan menggunakan larik, Anda dapat menghindari sinkronisasi, panggilan metode tambahan, dan pengubahan ukuran yang kurang optimal. Anda cukup membayar biaya waktu pengembangan ekstra.
Pelajari lebih lanjut tentang topik ini
- Bahasa Pemrograman Java Ken Arnold, James Gosling, dan David Holmes (Addison-Wesley, Juni 2000; ISBN0201704331)
//www.amazon.com/exec/obidos/ASIN/0201704331/javaworld/
- Java Praktis Peter Haggar (Addison-Wesley, Februari 2000; ISBN0201616467)
//www.amazon.com/exec/obidos/ASIN/0201616467/javaworld/
- Ingin lebih? Lihat Indeks Q&A Java untuk katalog Q&A lengkap
//www.javaworld.com/javaworld/javaqa/javaqa-index.html
- Selama lebih dari 100 kiat Jawa wawasan dari beberapa pikiran terbaik dalam bisnis ini, kunjungan JavaWorld' s Java Tips indeks
//www.javaworld.com/javatips/jw-javatips.index.html
- Mendaftarlah untuk mendapatkan buletin email mingguan gratis JavaWorld Minggu Ini untuk mengetahui apa yang baru di JavaWorld
//idg.net/jw-subscribe
Cerita ini, "Vector atau ArrayList - mana yang lebih baik?" awalnya diterbitkan oleh JavaWorld.