Vad är en ArrayList?
En ArrayList för datorprogrammering är en datastruktur som uppträder som en datoruppsättning men också implementerar förmågan att dynamiskt öka storleken på matrisen efter behov. Till skillnad från en inbyggd arraydatatyp, som inte kan ändras i storlek under programkörning, kan ArrayList-strukturen växa och krympa arrayens storlek som svar på tillägg eller radering av element. Den har en mycket gynnsam prestandaprofil, vilket ger snabb slumpmässig åtkomst till datainsamlingen. Det finns dock två fall där det är långsammare än vissa andra datastrukturer, nämligen tillägg och borttagning av element från mitten av matrisen. De flesta objektorienterade programmeringsspråk har någon typ av implementering av en sådan lista, även om de ibland kallas dynamiska matriser.
Att använda en ArrayList ger ett program möjlighet att komma åt dataobjekt med ett indexnummer direkt istället för att behöva gå igenom en hel sekvens av data för att hitta en adress, vilket krävs med länkade listor. Med förmågan att öka storleken på matrisen efter behov är det ett mycket balanserat tillvägagångssätt som tar hänsyn till både flexibilitet och hastighet. När element tas bort från en sådan lista reduceras dessutom storleken på matrisen, vilket frigör minnesutrymme.
En fördel med att använda en ArrayList över vissa andra datastrukturer är att ett wrapper-objekt inte krävs för att innehålla data som lagras. När det gäller en länkad lista eller en hashtabell behövs vanligtvis ett separat objekt för att upprätthålla den teknik som används för att hålla och manipulera samlingen. Med en ArrayList är den enda information som behövs om dataobjekten objektets adress i minnet. Detta innebär att det blir mindre minnesanvändning när du arbetar med den här listan.
Ett potentiellt problem med att använda en ArrayList kan komma från implementerings- och minneshanteringssystemet. De flesta matriser tilldelas som på varandra följande minnesplatser. Så för att använda en ArrayList av en viss storlek måste åtminstone så mycket minne finnas tillgängligt i en oavbruten sekvens av block. Den dynamiska matrisen kan ändra storlek på sig själv flera gånger, så att minnesfragmentering kan inträffa och leda till ett minnesallokeringsfel, vilket stoppar programkörningen.
Prestandan för en ArrayList liknar den för att använda en standardmatris, även om åtkomsttiderna är något långsammare eftersom matrisen är inkapslad i ett objekt. Ett exempel där en dynamisk matris kan bromsa dramatiskt, beroende på implementering, är när storleken på matrisen behöver ändras. Detta kan innebära att kopiera den aktuella matrisen till en ny matris som tilldelades den nya önskade storleken, vilket orsakar en tillfällig försämring av prestandan. Samma problem kan uppstå när du lägger till eller tar bort ett element från mitten av listan, vilket gör att alla följande element måste flyttas till en ny plats.