1. Gambaran keseluruhan
Java membolehkan kita membuat susunan ukuran tetap atau menggunakan kelas pengumpulan untuk melakukan pekerjaan yang serupa.
Dalam tutorial ini, kita akan melihat perbezaan antara kapasiti ArrayList dan ukuran Array.
Kami juga akan melihat contoh kapan kita harus menginisialisasi ArrayList dengan kapasiti dan kelebihan dan kekurangan dari segi penggunaan memori.
2. Contoh
Untuk memahami perbezaannya, mari kita mencuba kedua-dua pilihan terlebih dahulu.
2.1. Saiz Array
Di java, wajib menentukan ukuran array semasa membuat contoh baru daripadanya:
Integer[] array = new Integer[100]; System.out.println("Size of an array:" + array.length);
Di sini, kami membuat susunan I nteger bersaiz 100, yang menghasilkan output di bawah
Saiz array: 100
2.2. Kapasiti ArrayList
Sekarang, mari buat ArrayList dengan kapasiti awal 100:
List list = new ArrayList(100); System.out.println("Size of the list is :" + list.size());
Saiz senarai adalah: 0
Oleh kerana belum ada unsur yang ditambahkan, ukurannya adalah sifar.
Sekarang, mari kita tambahkan elemen ke dalam senarai dan periksa ukurannya:
list.add(10); System.out.println("Size of the list is :" + list.size());
Saiz senarai adalah: 1
3. Saiz dalam Susunan vs ArrayList
Berikut adalah beberapa perbezaan utama antara ukuran array dan kapasiti ArrayList.
3.1. Pengubahsuaian Saiz
Susunan adalah ukuran tetap. Setelah kami menginisialisasi array dengan beberapa nilai int sebagai ukurannya, ia tidak dapat berubah. Ukuran dan kapasiti sama antara satu sama lain.
Ukuran dan kapasiti ArrayList tidak tetap. Saiz logik senarai berubah berdasarkan penyisipan dan penyingkiran unsur-unsur di dalamnya. Ini diuruskan secara berasingan dari saiz simpanan fizikalnya. Juga apabila ambangkapasiti ArrayList tercapai, ia meningkatkan keupayaannya untuk memberi ruang kepada lebih banyak elemen.
3.2. Peruntukan Ingatan
Memori array diperuntukkan pada penciptaan. Apabila kita menginisialisasi array, ia mengalokasikan memori mengikut ukuran dan jenis array. Ini menginisialisasi semua elemen dengan nilai nol untuk jenis rujukan dan nilai lalai untuk jenis primitif.
ArrayList mengubah peruntukan memori semasa ia bertambah. Apabila kita menentukan kapasiti semasa menginisialisasi ArrayList , ia memperuntukkan memori yang cukup untuk menyimpan objek hingga kapasiti tersebut. Ukuran logiknya tetap 0. Apabila tiba masanya untuk mengembangkan kapasiti, susunan baru yang lebih besar akan dibuat, dan nilainya disalin kepadanya.
Kita harus perhatikan bahawa terdapat susunan bersaiz 0 tunggal untuk objek ArrayList kosong , menjadikannya sangat murah untuk dibuat. Perlu diperhatikan bahawa ArrayList secara dalaman menggunakan pelbagai rujukan Objek.
4. Bilakah Memulakan ArrayList dengan Kapasiti
Kita mungkin mengharapkan untuk memulakan kapasiti ArrayList apabila kita mengetahui ukurannya yang diperlukan sebelum membuatnya, tetapi biasanya tidak diperlukan. Namun, ada beberapa sebab mengapa ini mungkin merupakan pilihan terbaik.
4.1. Membina Senarai Array Besar
Adalah baik untuk memulakan senarai dengan kapasiti awal apabila kita tahu bahawa itu akan bertambah besar. Ini menghalang beberapa operasi yang bertambah mahal ketika kita menambah elemen.
Begitu juga, jika senarai itu sangat besar, operasi pertumbuhan automatik mungkin memperuntukkan lebih banyak memori daripada yang diperlukan untuk ukuran maksimum yang tepat. Ini kerana jumlah yang tumbuh setiap kali dikira sebagai bahagian dari ukuran setakat ini. Oleh itu, dengan senarai yang besar, ini boleh menyebabkan ingatan.
4.2. Membina Daftar Array Berganda Kecil s
Sekiranya kita mempunyai banyak koleksi kecil, maka kapasiti automatik ArrayList dapat memberikan peratusan besar memori yang terbuang. Katakan bahawa ArrayList lebih suka ukuran 10 dengan bilangan elemen yang lebih kecil, tetapi kita hanya menyimpan 2 atau 3. Itu bermakna 70% memori terbuang, yang mungkin penting jika kita mempunyai sebilangan besar senarai ini.
Menetapkan kapasiti di muka dapat mengelakkan keadaan ini.
5. Mengelakkan Pembaziran
Kita harus perhatikan bahawa ArrayList adalah penyelesaian yang baik untuk bekas objek berukuran fleksibel iaitu untuk menyokong akses rawak. Ia menggunakan memori yang sedikit lebih banyak daripada array tetapi menyediakan sekumpulan operasi yang lebih kaya.
Dalam beberapa kes penggunaan, terutama di sekitar koleksi nilai primitif yang besar, susunan piawai mungkin lebih cepat dan kurang menggunakan memori.
Begitu juga, untuk menyimpan sejumlah elemen yang tidak perlu diakses oleh indeks, LinkedList boleh menjadi lebih berprestasi. Ia tidak mempunyai overhead pengurusan memori.
6. Ringkasan
Dalam artikel pendek ini, kami melihat perbezaan antara kapasiti ArrayList dan ukuran array. Kami juga melihat kapan kita harus menginisialisasi ArrayList dengan kapasiti dan faedahnya berkaitan dengan penggunaan memori dan prestasi.
Seperti biasa, kod contoh boleh didapati di GitHub.