Kaj je ArrayList?

ArrayList v računalniškem programiranju je podatkovna struktura, ki se obnaša kot računalniška matrika, vendar po potrebi izvaja tudi možnost dinamičnega povečanja velikosti matrike. Za razliko od podatkovnega tipa intrinzičnega niza, katerega velikosti ni mogoče spremeniti med izvajanjem programa, lahko struktura ArrayList raste in skrči velikost matrike kot odgovor na dodajanje ali brisanje elementov. Ima zelo ugoden profil delovanja, ki omogoča hiter naključni dostop do zbirke podatkov. Obstajata pa dva primera, v katerih je počasnejši od nekaterih drugih podatkovnih struktur, in sicer dodajanje in odstranjevanje elementov iz sredine matrike. Večina objektno usmerjenih programskih jezikov ima določeno izvedbo takega seznama, čeprav jih včasih imenujemo dinamične matrike.

Uporaba ArrayList omogoča programu, da takoj dostopa do podatkovnih objektov z indeksno številko, namesto da bi se moral sprehoditi skozi celotno zaporedje podatkov, da bi našel naslov, ki je potreben pri povezanih seznamih. Z možnostjo povečanja velikosti matrike po potrebi je zelo uravnotežen pristop, ki upošteva tako prilagodljivost kot hitrost. Poleg tega, ko se elementi odstranijo s takega seznama, se velikost matrike zmanjša, kar sprosti prostor v pomnilniku.

Ena od prednosti uporabe ArrayList pred nekaterimi drugimi podatkovnimi strukturami je, da objektu ovoja ni treba vsebovati shranjenih podatkov. V primeru povezanega seznama ali zgoščevalne tabele je običajno potreben ločen objekt za vzdrževanje tehnike, ki se uporablja za shranjevanje in upravljanje zbirke. Pri ArrayList je edina potrebna informacija o podatkovnih objektih naslov predmeta v pomnilniku. To pomeni, da bo pri delu s to vrsto seznama manjša poraba pomnilnika.

Morebitna težava pri uporabi ArrayList lahko izvira iz implementacije in sistema za upravljanje pomnilnika. Večina matrik je dodeljenih kot zaporednih pomnilniških lokacij. Torej, če želite uporabiti ArrayList določene velikosti, mora biti na voljo vsaj toliko pomnilnika v neprekinjenem zaporedju blokov. Dinamična matrika bi se lahko večkrat spremenila v velikost, zato lahko pride do fragmentacije pomnilnika in povzroči napako pri dodelitvi pomnilnika, kar ustavi izvajanje programa.

Učinkovitost ArrayList je podobna uporabi standardnega niza, čeprav so časi dostopa nekoliko počasnejši, ker je matrika inkapsulirana v objekt. Eden od primerov, ko se lahko dinamična matrika močno upočasni, odvisno od implementacije, je, ko je treba spremeniti velikost matrike. To lahko vključuje kopiranje trenutne matrike v novo matriko, ki je bila dodeljena novi želeni velikosti, kar povzroči začasno poslabšanje zmogljivosti. Ista težava se lahko pojavi pri dodajanju ali odstranjevanju elementa na sredini seznama, zaradi česar je treba vse naslednje elemente premakniti na novo lokacijo.