Mis on dünaamiline massiiv?

Dünaamiline massiiv on arvutiprogrammeerimises kasutatav andmestruktuur, mis hoiab mitut arvutusobjekti ühe rühmana ja mille suurust saab soovi korral muuta, et mahutada erinevat arvu objekte. Gruppi hoitakse ühes külgnevas mäluplokis, nii et juurdepääs elementidele on tõhus ja kiire. Dünaamilisi massiive nimetatakse ka vektoriteks või loenditeks, olenevalt arvutikeelest, milles neid kasutatakse. Vaatamata nendele nimedele ei pruugi ükski loend või vektor olla dünaamiline massiiv, kuna loendeid ja vektoreid võidakse rakendada massiividest ja üksteisest erinevalt.

C++ sisaldab ühte dünaamilise massiivi klassi nimega vektor, mis asub klasside rühmas, mida nimetatakse standardmalliteegiks. Seda klassi toetavale massiivile pääsevad juurde iteraatorid või indeksid. Selle võime nõudmisel suurust muuta on suur eelis, kuid see võib meelitada programmeerijaid võltsturvatundele, kuna see pole nii vastupidav, kui tundub. Vektorit toetav dünaamiline massiiv ei saa tagada juurdepääsutaotluste kehtivust. Nagu staatilistel massiividel, võib ka dünaamilistel massiividel esineda piiride kontrollimise ja mälu rikkumisprobleeme, kui programm üritab pääseda juurde mälule, mida pole nende jaoks eraldatud.

Java sisaldab kolme erinevat dünaamilise massiivi klassi: Vector, ArrayList ja CopyOnWriteArrayList. Massiivi elementidele pääsevad juurde ainult indeksid ja väljaspool massiivi asuvatele indeksitele juurdepääsu katse ei põhjusta tavaliselt mälukahjustusi. Java Vectori klass on ligikaudu samaväärne C++ vektoriklassiga ja seda ei sünkroonita, et võimaldada juurdepääsu mitmele lõimele. ArrayList ja CopyOnWriteArrayList on seevastu mõlemad lõimekindlad. Nendest kolmest on CopyOnWriteArrayList kõige töömahukam klass, kuna see loob dünaamilise massiivi täielikult uuesti iga kord, kui massiivi kirjutatakse uus väärtus.

Dünaamilisi massiive rakendatakse põhimõtteliselt samal viisil, olenemata kasutatavast arvutikeelest, kuid olenevalt konkreetsest keelest võib selle peale ehitada muid võimalusi. Nagu staatilised massiivid, ei piira dünaamilised massiivid nendesse salvestatavate objektide tüüpi, kui need kõik on sama tüüpi objektid. Programmeerija ei pea kunagi dünaamilisele massiivile otse juurde pääsema; seda saab alati teha klassi kaudu, mis pakib massiivi hõlpsaks kasutamiseks. Nende massiivide nõuetekohane kasutamine võib aidata programmeerijal koodi sees andmeid korraldada ja luua arusaadavat koodi, mida on lihtne hooldada.