Mis on ArrayList?

ArrayList arvutiprogrammeerimises on andmestruktuur, mis käitub nagu arvutimassiivi, kuid rakendab ka võimalust massiivi suurust vastavalt vajadusele dünaamiliselt suurendada. Erinevalt sisemisest massiivi andmetüübist, mille suurust ei saa programmi täitmise ajal muuta, võib ArrayListi struktuur vastusena elementide lisamisele või kustutamisele massiivi suurust suurendada ja kahandada. Sellel on väga soodne jõudlusprofiil, mis võimaldab kiiret juhuslikku juurdepääsu andmete kogumisele. Siiski on kaks juhtumit, kus see on aeglasem kui mõned muud andmestruktuurid, nimelt elementide lisamine ja eemaldamine massiivi keskelt. Enamikul objektorienteeritud programmeerimiskeeltel on sellise loendi teatud tüüpi rakendus, kuigi mõnikord nimetatakse neid dünaamilisteks massiivideks.

ArrayListi kasutamine annab programmile võimaluse pääseda kohe juurde indeksinumbriga andmeobjektidele, selle asemel, et aadressi leidmiseks läbi käia terve andmejada, mis on vajalik lingitud loendite puhul. Võimalus massiivi vastavalt vajadusele suurendada, on see väga tasakaalustatud lähenemine, mis arvestab nii paindlikkust kui ka kiirust. Lisaks, kui elemendid sellisest loendist eemaldatakse, vähendatakse massiivi suurust, vabastades mäluruumi.

Üks ArrayListi kasutamise eelis võrreldes mõne muu andmestruktuuriga on see, et ümbrisobjekt ei pea sisaldama salvestatavaid andmeid. Lingitud loendi või räsitabeli puhul on tavaliselt kogu hoidmiseks ja manipuleerimiseks kasutatava tehnika säilitamiseks vaja eraldi objekti. ArrayListi puhul on andmeobjektide kohta vajalik teave ainult objekti aadress mälus. See tähendab, et seda tüüpi loendiga töötades kulub vähem üldmälu.

Võimalik probleem ArrayListi kasutamisega võib tuleneda rakendus- ja mäluhaldussüsteemist. Enamik massiive on eraldatud järjestikuste mälukohtadena. Seega peab teatud suurusega ArrayListi kasutamiseks olema vähemalt nii palju mälu katkematus plokkide jadas. Dünaamiline massiiv võib enda suurust mitu korda muuta, nii et võib tekkida mälu killustumine ja see võib põhjustada mälu eraldamise tõrke, peatades programmi täitmise.

ArrayListi toimivus sarnaneb standardse massiivi kasutamisega, kuigi juurdepääsuajad on pisut aeglasemad, kuna massiiv on kapseldatud objekti. Üks juhtum, kus dünaamiline massiiv võib olenevalt rakendusest järsult aeglustada, on siis, kui massiivi suurust tuleb muuta. See võib hõlmata praeguse massiivi kopeerimist uude massiivi, mis määrati uuele soovitud suurusele, põhjustades ajutise jõudluse halvenemise. Sama probleem võib kogeda elemendi lisamisel või loendi keskelt eemaldamisel, mistõttu tuleb kõik järgmised elemendid uude asukohta teisaldada.