1. Paano ArrayListnakabalangkas

ArrayListay ang klase ng Java na pinakakaraniwang ginagamit para sa pag-iimbak ng mga elemento. Kaya paano ArrayListgumagana at bakit ang lahat ay gusto ito nang labis?

Ang istraktura ng ArrayListay simple at mapanlikha. Ang bawat ArrayListbagay ay naglalaman ng dalawang patlang:

  • Isang hanay ng mga elemento
  • Isang sizevariable, na nag-iimbak ng bilang ng mga elemento sa listahan

Sa panloob, ang isang ArrayListbagay ay naglalaman ng isang pinakakaraniwang hanay! Ngunit hindi lang iyon. Mayroon ding variable ng laki , na nag-iimbak ng haba ng listahan. Ito ay kung paano ito gumagana:

Sa una, ang haba ng array sa loob ng listahan ay 10. At ang sizevariable ay 0.

Kung magdaragdag ka ng elemento sa listahan, ito ay maiimbak sa ika-0 na cell ng array, at sizetataas sa 1.

Kung magdadagdag ka ng isa pang elemento, maiimbak ito sa 1st cell, at sizetataas muli ng 1 at magiging katumbas ng dalawa.

Kung nagdagdag ka ng isa pang elemento kapag wala nang espasyo sa array, ang mga sumusunod ay mangyayari sa add()pamamaraan:

  1. Ang isang bagong array ay nilikha na isa at kalahating beses ang haba ng nauna
  2. Ang lahat ng mga elemento ng lumang array ay kinopya sa bagong array.
  3. Sa ArrayListobject, pinapalitan ng reference sa bagong array ang reference sa luma .
  4. Ang naipasa na elemento ay nai-save sa ika-10 cell ng bagong array.
  5. Ang laki ng variable ay tumataas ng 1 at ngayon ay magiging katumbas ng 11

May katulad na nangyayari kapag nagdaragdag (naglalagay) ng elemento sa gitna ng listahan. Ang mga umiiral na elemento ay inililipat ng 1 sa kanan, at ang naipasa na elemento ay isinusulat sa bagong laya na cell ng array.

Ngayon ay isasaalang-alang natin ang pinakapangunahing mga sitwasyong kinasasangkutan ng mga listahan:


2. Pagdaragdag ng isang elemento sa isangArrayList

Tingnan natin kung ano ang mangyayari sa loob ng listahan kapag idinagdag ang mga elemento dito. Kaagad pagkatapos malikha ang isang ArrayList object, mayroon kaming ganito sa memorya:

Pagdaragdag ng isang elemento sa isang ArrayList

Mayroon kaming isang ArrayListbagay na naglalaman ng dalawang field (dalawang variable): isang lalagyan (ang dataarray) at ang bilang ng mga nakaimbak na elemento ( size). Ang datavariable ay nag-iimbak ng isang reference sa isang lalagyan (array) na maaaring mag-imbak ng 10 elemento.

Kung magpasya kaming idagdag ang numero 5 sa array, makuha namin ang sumusunod na larawan:

Pagdaragdag ng isang elemento sa isang ArrayList 2

Iniimbak na ngayon ng array ang elemento 5, at size == 1.

Kung may tumawag sa size()paraan sa aming ArrayListobject ngayon, ang return value ay ang bilang ng mga elementong nakaimbak sa listahan: 1. Ang bilang ng mga elemento sa listahan ay hindi pareho sa kapasidad ng storage ng array.

Ni ang kasalukuyang kapasidad ng imbakan o ang array mismo ay hindi maa-access (nakikita) sa labas ng ArrayListbagay. Ito ay at palaging magiging ArrayListpanloob na data ng 's.

Magdagdag tayo ng 7 pang numero sa listahan: 10, 20, 30, 40, 50, 60, 70.

Ngayon ang memorya ay magiging ganito:

Pagdaragdag ng isang elemento sa isang ArrayList

Kung tatawagan mo ang size()pamamaraan ngayon, ibabalik nito ang numero 8, na siyang bagong bilang ng mga elemento sa listahan. Ang halagang ito ay walang kinalaman sa laki ng panloob na hanay.

Mahalaga:

Mayroong isang sobrang pagpapasimple sa larawang ito.

Ang ArrayListklase ay hindi maaaring mag-imbak ng mga primitive na uri, kaya ginagamit nito ang Integeruri sa halip na int. Hindi direktang iniimbak ng container ang mga value na {5, 10, 20, 30, 40, 50, 60, 70}, ngunit sa halip ay mga reference sa mga Integerbagay. Lahat ng walang laman na cell sa container store null.



3. Pagtaas ng haba ng isang listahan

Tingnan natin kung ano ang nangyayari sa loob ng isang listahan kapag wala nang mga walang laman na cell sa panloob na hanay nito.

Ipagpalagay na mayroon kaming isang listahan ng 10 elemento:

Pagtaas ng haba ng isang listahan

Nagpasya kaming idagdag ang numerong 100 dito. Ito ang nangyayari sa add()pamamaraan:

Hakbang 1 — Gumawa ng bagong array:

Pagdaragdag ng haba ng isang listahan 2

Hakbang 2 — Kopyahin ang lahat ng elemento mula sa lumang array hanggang sa bago:

Pagdaragdag ng haba ng isang listahan 2

Hakbang 3 — Palitan ang lumang array (baguhin ang reference sa ArrayListpanloob na array ng object):

Pagdaragdag ng haba ng isang listahan 3

Hakbang 4 — Idagdag ang bagong numero, na siyang pinaghirapan naming gawin:

Pagdaragdag ng haba ng isang listahan 4