Što je ArrayList?

ArrayList u računalnom programiranju je struktura podataka koja se ponaša kao računalni niz, ali također implementira sposobnost dinamičkog povećanja veličine polja prema potrebi. Za razliku od intrinzičnog tipa podataka niza, čija se veličina ne može promijeniti tijekom izvođenja programa, struktura ArrayList može rasti i smanjiti veličinu niza kao odgovor na dodavanje ili brisanje elemenata. Ima vrlo povoljan profil performansi, što omogućuje brz nasumični pristup prikupljanju podataka. Međutim, postoje dvije instance u kojima je sporiji od nekih drugih struktura podataka, odnosno dodavanje i uklanjanje elemenata iz sredine niza. Većina objektno orijentiranih programskih jezika ima neku vrstu implementacije takvog popisa, iako se ponekad nazivaju dinamički nizovi.

Korištenje ArrayList daje programu mogućnost trenutnog pristupa podatkovnim objektima s indeksnim brojem umjesto da mora prolaziti kroz cijeli niz podataka kako bi pronašao adresu, što je potrebno za povezane liste. Uz mogućnost povećanja veličine niza prema potrebi, to je vrlo uravnotežen pristup koji uzima u obzir i fleksibilnost i brzinu. Dodatno, kada se elementi uklone s takvog popisa, veličina niza se smanjuje, oslobađajući memorijski prostor.

Jedna od prednosti korištenja ArrayList u odnosu na neke druge strukture podataka je da objekt omota ne mora sadržavati podatke koji se pohranjuju. U slučaju povezanog popisa ili hash tablice, obično je potreban poseban objekt za održavanje tehnike koja se koristi za držanje i upravljanje zbirkom. Uz ArrayList, jedina potrebna informacija o objektima podataka je adresa objekta u memoriji. To znači da će pri radu s ovom vrstom popisa biti manja upotreba nadzemne memorije.

Potencijalni problem s korištenjem ArrayList može doći od implementacije i sustava upravljanja memorijom. Većina nizova se dodjeljuje kao uzastopna memorijska mjesta. Dakle, da biste koristili ArrayList određene veličine, barem toliko memorije mora biti dostupno u neprekinutom nizu blokova. Dinamički niz može sam sebi promijeniti veličinu nekoliko puta, tako da može doći do fragmentacije memorije i dovesti do neuspjeha u dodjeli memorije, zaustavljanja izvršavanja programa.

Izvedba ArrayList je slična onoj pri korištenju standardnog niza, iako su vremena pristupa nešto sporija jer je niz inkapsuliran u objekt. Jedan slučaj u kojem se dinamički niz može dramatično usporiti, ovisno o implementaciji, je kada je potrebno promijeniti veličinu niza. To može uključivati ​​kopiranje trenutnog niza u novi niz koji je dodijeljen novoj željenoj veličini, uzrokujući privremenu degradaciju performansi. Isti problem može se pojaviti prilikom dodavanja ili uklanjanja elementa iz sredine popisa, zbog čega svi sljedeći elementi moraju biti premješteni na novo mjesto.