Vector atau ArrayList - mana yang lebih baik?

T: Vector atau ArrayList - mana yang lebih baik dan mengapa?

J: Terkadang Vectorlebih baik; terkadang ArrayListlebih 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 Vectorsebagai analog ke ArrayList. Jadi, dari perspektif API, kedua kelas tersebut sangat mirip. Namun, masih ada beberapa perbedaan utama antara kedua kelas tersebut.

Sinkronisasi

Vectorsdisinkronkan. Metode apa pun yang menyentuh Vectorkonten 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 ArrayListdan Vectorpegang isinya menggunakan Array. Anda perlu mengingat fakta ini saat menggunakan salah satu dari program Anda. Saat Anda memasukkan elemen ke dalam ArrayListatau a Vector, objek perlu memperluas larik internalnya jika kehabisan ruangan. A Vectordefault untuk menggandakan ukuran arraynya, sedangkan fileArrayListmeningkatkan 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, Vectormemang memiliki sedikit keuntungan karena Anda dapat menetapkan nilai kenaikan.

Pola penggunaan

Baik ArrayListdan Vectorbaik 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 Vectoratau ArrayList. Jika Anda ingin melakukan hal lain pada isinya, carilah kelas kontainer lain untuk diri Anda sendiri. Misalnya, LinkedListdapat 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 ArrayListjuga lebih mudah karena Anda cukup menggunakan indeks daripada harus membuat iterator. Ini LinkedListjuga 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 Vectoratau 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.