Vad är en Dynamic Array?

En dynamisk array är en datastruktur som används i datorprogrammering som innehåller flera beräkningsobjekt som en enda grupp, och som kan ändras i storlek efter behag för att rymma ett varierande antal objekt. Gruppen hålls i ett enda sammanhängande minnesblock, så tillgången till element är effektiv och snabb. Dynamiska arrayer kallas också vektorer eller listor, beroende på vilket datorspråk de används på. Trots dessa namn kanske en viss lista eller vektor inte är en dynamisk array, eftersom listor och vektorer kan implementeras annorlunda än arrayer och från varandra.

C++ innehåller en enda dynamisk arrayklass kallad vektor, som finns i en grupp klasser som kallas standardmallbiblioteket. Arrayen som stöder denna klass kan nås av iteratorer eller av index. Dess förmåga att ändra storlek på begäran är en stor fördel, men det kan locka programmerare till en falsk känsla av säkerhet eftersom den inte är så robust som den verkar vara. Den dynamiska arrayen som stödjer en vektor kan inte säkerställa att åtkomstförfrågningar är giltiga. Liksom statiska arrayer kan dynamiska arrayer ha gränskontroll och problem med minneskorruption om ett program försöker komma åt minne som inte har allokerats för dem.

Java innehåller tre distinkta dynamiska arrayklasser: Vector, ArrayList och CopyOnWriteArrayList. Element i arrayen nås endast av index, och försök att komma åt index utanför arrayen kommer vanligtvis inte att orsaka problem med minneskorruption. Java Vector-klassen är ungefär lika med vektorklassen C++ och är inte synkroniserad för att möjliggöra åtkomst av flera trådar. ArrayList och CopyOnWriteArrayList, däremot, är båda trådsäkra. Av de tre är CopyOnWriteArrayList den mest arbetsintensiva klassen, eftersom den helt återskapar den dynamiska arrayen varje gång ett nytt värde skrivs till arrayen.

Dynamiska arrayer implementeras på i huvudsak samma sätt oavsett vilket datorspråk som är inblandat, men beroende på ett visst språk kan det finnas andra funktioner som byggs ovanpå det. Liksom statiska arrayer begränsar inte dynamiska arrayer typen av objekt som kan lagras inuti dem, så länge de alla är av samma typ av objekt. En programmerare behöver aldrig komma åt en dynamisk array direkt; det kan alltid göras genom en klass som omsluter arrayen för enkel användning. Korrekt användning av dessa arrayer kan hjälpa en programmerare med dataorganisation inuti kod, och även med att skapa begriplig kod som lämpar sig för enkelt underhåll.