Mikä on ArrayList?

Tietokoneohjelmoinnin ArrayList on tietorakenne, joka käyttäytyy kuin tietokonejärjestelmä, mutta toteuttaa myös kyvyn kasvattaa taulukon kokoa dynaamisesti tarpeen mukaan. Toisin kuin luontainen matriisin tietotyyppi, jonka kokoa ei voi muuttaa ohjelman suorituksen aikana, ArrayList -rakenne voi kasvaa ja pienentää taulukon kokoa vastauksena elementtien lisäämiseen tai poistamiseen. Sillä on erittäin edullinen suorituskykyprofiili, joka mahdollistaa nopean satunnaisen pääsyn tiedonkeruuseen. On kuitenkin kaksi tapausta, joissa se on hitaampi kuin jotkut muut tietorakenteet, nimittäin elementtien lisääminen ja poistaminen taulukon keskeltä. Useimmissa olio-ohjelmointikielissä on jonkinlainen toteutus tällaisesta luettelosta, vaikka niitä kutsutaan joskus dynaamisiksi matriiseiksi.

ArrayListin käyttö antaa ohjelmalle mahdollisuuden käyttää indeksinumerolla varustettuja tietoobjekteja välittömästi sen sijaan, että joutuisi kävelemään läpi koko tietosarjan löytääkseen osoitteen, joka vaaditaan linkitetyissä luetteloissa. Koska kykyä lisätä ryhmän kokoa tarpeen mukaan, se on erittäin tasapainoinen lähestymistapa, jossa otetaan huomioon sekä joustavuus että nopeus. Lisäksi kun elementit poistetaan tällaisesta luettelosta, taulukon koko pienenee, mikä vapauttaa muistitilaa.

Yksi ArrayListin käytön eduista muihin tietorakenteisiin verrattuna on se, että kääreobjektin ei tarvitse sisältää tallennettavia tietoja. Linkitetyn luettelon tai hajautuspöydän tapauksessa tarvitaan yleensä erillinen objekti kokoelman pitämiseen ja käsittelyyn käytettävän tekniikan ylläpitämiseksi. ArrayListin avulla dataobjekteista tarvitaan vain tietoja muistissa olevan kohteen osoite. Tämä tarkoittaa sitä, että tämäntyyppisen luettelon kanssa työskentely vähentää muistin käyttöä.

Mahdollinen ongelma ArrayListin käytössä voi johtua toteutus- ja muistinhallintajärjestelmästä. Useimmat taulukot on varattu peräkkäisiksi muistipaikoiksi. Joten tietyn kokoisen ArrayListin käyttämiseksi vähintään yhtä paljon muistia on oltava käytettävissä keskeytymättömässä lohkosarjassa. Dynaaminen ryhmä voi muuttaa kokoaan useita kertoja, joten muistin pirstoutuminen voi tapahtua ja johtaa muistin varausvirheeseen, joka pysäyttää ohjelman suorituksen.

ArrayListin suorituskyky on samanlainen kuin vakiotaulukon käytön, vaikka käyttöajat ovat hieman hitaampia, koska matriisi on kapseloitu objektiin. Yksi tapaus, jossa dynaaminen ryhmä voi hidastua dramaattisesti toteutuksesta riippuen, on silloin, kun taulukon kokoa on muutettava. Tämä voi sisältää nykyisen taulukon kopioinnin uuteen taulukkoon, joka on allokoitu halutulle uudelle koolle, mikä aiheuttaa tilapäisen suorituskyvyn heikkenemisen. Sama ongelma voi ilmetä, kun lisäät tai poistat elementin luettelon keskeltä, jolloin kaikki seuraavat elementit on siirrettävä uuteen paikkaan.