1. Bagaimana ArrayListtersusun

ArrayListialah kelas Java yang paling biasa digunakan untuk menyimpan elemen. Jadi bagaimana ia ArrayListberfungsi dan mengapa semua orang sangat menyukainya?

Strukturnya ArrayListmudah dan bijak. Setiap ArrayListobjek mengandungi dua medan:

  • Susunan elemen
  • Pembolehubah size, yang menyimpan bilangan elemen dalam senarai

Secara dalaman, ArrayListobjek 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 sizepembolehubah ialah 0.

Jika anda menambah elemen pada senarai, ia akan disimpan dalam sel ke-0 tatasusunan, dan sizeakan meningkat kepada 1.

Jika anda menambah satu lagi elemen, ia akan disimpan dalam sel pertama, dan sizesekali 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:

  1. Tatasusunan baharu dicipta iaitu satu setengah kali ganda panjang daripada yang sebelumnya
  2. Semua elemen tatasusunan lama disalin ke tatasusunan baharu.
  3. Dalam ArrayListobjek, rujukan kepada tatasusunan baharu menggantikan rujukan kepada yang lama .
  4. Elemen yang diluluskan disimpan dalam sel ke-10 tatasusunan baharu.
  5. 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:

Menambah elemen pada ArrayList

Kami mempunyai ArrayListobjek yang mengandungi dua medan (dua pembolehubah): bekas (tatasusunan data) dan bilangan elemen yang disimpan ( size). Pembolehubah datamenyimpan rujukan kepada bekas (tatasusunan) yang boleh menyimpan 10 elemen.

Jika kami memutuskan untuk menambah nombor 5 pada tatasusunan, kami mendapat gambar berikut:

Menambah elemen pada ArrayList 2

Tatasusunan kini menyimpan elemen 5, dan size == 1.

Jika seseorang memanggil size()kaedah pada ArrayListobjek 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 ArrayListobjek. Ini adalah dan akan sentiasa menjadi ArrayListdata dalaman '.

Mari tambah 7 lagi nombor pada senarai: 10, 20, 30, 40, 50, 60, 70.

Sekarang ingatan akan kelihatan seperti ini:

Menambah elemen pada ArrayList

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.

Penting:

Terdapat satu penyederhanaan yang berlebihan dalam gambar ini.

Kelas ArrayListtidak boleh menyimpan jenis primitif, jadi ia menggunakan Integerjenis dan bukannya int. Bekas tidak menyimpan secara langsung nilai {5, 10, 20, 30, 40, 50, 60, 70}, sebaliknya merujuk kepada Integerobjek. 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:

Menambah panjang senarai

Kami memutuskan untuk menambah nombor 100 kepadanya. Inilah yang berlaku dalam add()kaedah:

Langkah 1 — Buat tatasusunan baharu:

Menambah panjang senarai 2

Langkah 2 — Salin semua elemen daripada tatasusunan lama kepada yang baharu:

Menambah panjang senarai 2

Langkah 3 — Gantikan tatasusunan lama (tukar rujukan kepada ArrayListtatasusunan dalaman objek):

Menambah panjang senarai 3

Langkah 4 — Tambahkan nombor baharu, yang merupakan perkara yang kami berusaha keras untuk capai:

Menambah panjang senarai 4