1. Bagaimana ArrayList
strukturnya
ArrayList
adalah kelas Java yang paling umum digunakan untuk menyimpan elemen. Jadi bagaimana cara ArrayList
kerjanya dan mengapa semua orang sangat menyukainya?
Struktur ArrayList
sederhana dan cerdik. Setiap ArrayList
objek berisi dua bidang:
- Array elemen
- Variabel
size
, yang menyimpan jumlah elemen dalam daftar
Secara internal, sebuah ArrayList
objek berisi array paling biasa! Tapi itu belum semuanya. Ada juga variabel ukuran , yang menyimpan panjang daftar. Begini Cara kerjanya:
Awalnya, panjang array di dalam list adalah 10. Dan variabelnya size
adalah 0.
Jika Anda menambahkan elemen ke daftar, itu akan disimpan di sel ke-0 dari array, dan size
akan bertambah menjadi 1.
Jika Anda menambahkan satu elemen lagi, itu akan disimpan di sel pertama, dan size
akan bertambah 1 lagi dan menjadi sama dengan dua.
Jika Anda menambahkan elemen lain saat tidak ada lagi ruang di dalam array, maka hal berikut akan terjadi di dalam add()
metode:
- Array baru dibuat dengan panjang satu setengah kali dari yang sebelumnya
- Semua elemen dari array lama disalin ke dalam array baru.
- Di
ArrayList
objek, referensi ke larik baru menggantikan referensi ke larik lama . - Elemen yang diteruskan disimpan di sel ke-10 dari array baru.
- Variabel ukuran bertambah 1 dan sekarang akan sama dengan 11
Hal serupa terjadi saat menambahkan (memasukkan) elemen di tengah daftar. Elemen yang ada digeser 1 ke kanan, dan elemen yang diteruskan ditulis ke sel array yang baru dibebaskan.
Sekarang kita akan mempertimbangkan skenario paling dasar yang melibatkan daftar:
2. Menambahkan elemen ke anArrayList
Mari kita lihat apa yang terjadi di dalam daftar ketika elemen ditambahkan ke dalamnya. Segera setelah objek ArrayList dibuat, kami memiliki sesuatu seperti ini di memori:
Kami memiliki ArrayList
objek yang berisi dua bidang (dua variabel): wadah (array data
) dan jumlah elemen yang disimpan ( size
). Variabel data
menyimpan referensi ke wadah (array) yang dapat menyimpan 10 elemen.
Jika kami memutuskan untuk menambahkan angka 5 ke array, kami mendapatkan gambar berikut:
Array sekarang menyimpan elemen 5, dan size == 1
.
Jika seseorang memanggil size()
metode pada ArrayList
objek kita sekarang, nilai kembaliannya adalah jumlah elemen yang disimpan dalam daftar: 1. Jumlah elemen dalam daftar tidak sama dengan kapasitas penyimpanan array.
Baik kapasitas penyimpanan saat ini maupun array itu sendiri tidak akan pernah dapat diakses (terlihat) di luar objek ArrayList
. Ini adalah dan akan selalu menjadi ArrayList
data internal.
Mari tambahkan 7 angka lagi ke daftar: 10, 20, 30, 40, 50, 60, 70.
Sekarang memori akan terlihat seperti ini:
Jika Anda memanggil size()
metode sekarang, itu akan mengembalikan angka 8, yang merupakan jumlah elemen baru dalam daftar. Nilai ini tidak ada hubungannya dengan ukuran array internal.
Ada satu penyederhanaan berlebihan dalam gambar ini.
Kelas ArrayList
tidak dapat menyimpan tipe primitif, sehingga menggunakan Integer
tipe daripada int
. Wadah tidak secara langsung menyimpan nilai {5, 10, 20, 30, 40, 50, 60, 70}, melainkan referensi ke Integer
objek. Semua sel kosong di dalam wadah menyimpan null
.
3. Menambah panjang daftar
Mari kita lihat apa yang terjadi di dalam daftar ketika tidak ada lagi sel kosong di dalam larik internalnya.
Misalkan kita memiliki daftar 10 elemen:
Kami memutuskan untuk menambahkan angka 100 ke dalamnya. Inilah yang terjadi dalam add()
metode:
Langkah 1 — Buat larik baru:
Langkah 2 — Salin semua elemen dari larik lama ke larik baru:
Langkah 3 — Ganti larik lama (ubah referensi ke ArrayList
larik internal objek):
Langkah 4 — Tambahkan nomor baru, yang merupakan hasil kerja keras kami:
GO TO FULL VERSION