1. Bagaimana ArrayList
tersusun
ArrayList
ialah kelas Java yang paling biasa digunakan untuk menyimpan elemen. Jadi bagaimana ia ArrayList
berfungsi dan mengapa semua orang sangat menyukainya?
Strukturnya ArrayList
mudah dan bijak. Setiap ArrayList
objek mengandungi dua medan:
- Susunan elemen
- Pembolehubah
size
, yang menyimpan bilangan elemen dalam senarai
Secara dalaman, ArrayList
objek mengandungi tatasusunan yang paling biasa! Tetapi bukan itu sahaja. Terdapat juga pembolehubah saiz , yang menyimpan panjang senarai. Ini adalah cara ia berfungsi:
Pada mulanya, panjang tatasusunan di dalam senarai ialah 10. Dan size
pembolehubah ialah 0.
Jika anda menambah elemen pada senarai, ia akan disimpan dalam sel ke-0 tatasusunan, dan size
akan meningkat kepada 1.
Jika anda menambah satu lagi elemen, ia akan disimpan dalam sel pertama, dan size
sekali lagi akan meningkat sebanyak 1 dan menjadi sama dengan dua.
Jika anda menambah elemen lain apabila tiada lagi ruang dalam tatasusunan, maka perkara berikut berlaku dalam add()
kaedah:
- Tatasusunan baharu dicipta iaitu satu setengah kali ganda panjang daripada yang sebelumnya
- Semua elemen tatasusunan lama disalin ke tatasusunan baharu.
- Dalam
ArrayList
objek, rujukan kepada tatasusunan baharu menggantikan rujukan kepada yang lama . - Elemen yang diluluskan disimpan dalam sel ke-10 tatasusunan baharu.
- Pembolehubah saiz meningkat sebanyak 1 dan kini akan sama dengan 11
Sesuatu yang serupa berlaku apabila menambah (memasukkan) elemen di tengah-tengah senarai. Elemen sedia ada dialihkan sebanyak 1 ke kanan, dan elemen yang diluluskan ditulis ke sel tatasusunan yang baru dibebaskan.
Sekarang kita akan mempertimbangkan senario paling asas yang melibatkan senarai:
2. Menambah elemen pada anArrayList
Mari kita lihat apa yang berlaku di dalam senarai apabila elemen ditambahkan padanya. Sejurus selepas objek ArrayList dicipta, kita mempunyai sesuatu seperti ini dalam ingatan:
Kami mempunyai ArrayList
objek yang mengandungi dua medan (dua pembolehubah): bekas (tatasusunan data
) dan bilangan elemen yang disimpan ( size
). Pembolehubah data
menyimpan rujukan kepada bekas (tatasusunan) yang boleh menyimpan 10 elemen.
Jika kami memutuskan untuk menambah nombor 5 pada tatasusunan, kami mendapat gambar berikut:
Tatasusunan kini menyimpan elemen 5, dan size == 1
.
Jika seseorang memanggil size()
kaedah pada ArrayList
objek kita sekarang, nilai pulangan ialah bilangan elemen yang disimpan dalam senarai: 1. Bilangan elemen dalam senarai tidak sama dengan kapasiti penyimpanan tatasusunan.
Kapasiti storan semasa mahupun tatasusunan itu sendiri tidak akan dapat diakses (kelihatan) di luar ArrayList
objek. Ini adalah dan akan sentiasa menjadi ArrayList
data dalaman '.
Mari tambah 7 lagi nombor pada senarai: 10, 20, 30, 40, 50, 60, 70.
Sekarang ingatan akan kelihatan seperti ini:
Jika anda memanggil size()
kaedah sekarang, ia akan mengembalikan nombor 8, iaitu bilangan elemen baharu dalam senarai. Nilai ini tiada kaitan dengan saiz tatasusunan dalaman.
Terdapat satu penyederhanaan yang berlebihan dalam gambar ini.
Kelas ArrayList
tidak boleh menyimpan jenis primitif, jadi ia menggunakan Integer
jenis dan bukannya int
. Bekas tidak menyimpan secara langsung nilai {5, 10, 20, 30, 40, 50, 60, 70}, sebaliknya merujuk kepada Integer
objek. Semua sel kosong dalam stor kontena null
.
3. Menambah panjang senarai
Mari kita lihat apa yang berlaku di dalam senarai apabila tiada lagi sel kosong dalam tatasusunan dalamannya.
Katakan kita mempunyai senarai 10 elemen:
Kami memutuskan untuk menambah nombor 100 kepadanya. Inilah yang berlaku dalam add()
kaedah:
Langkah 1 — Buat tatasusunan baharu:
Langkah 2 — Salin semua elemen daripada tatasusunan lama kepada yang baharu:
Langkah 3 — Gantikan tatasusunan lama (tukar rujukan kepada ArrayList
tatasusunan dalaman objek):
Langkah 4 — Tambahkan nombor baharu, yang merupakan perkara yang kami berusaha keras untuk capai:
GO TO FULL VERSION