Hvad er en ArrayList?
En ArrayList til computerprogrammering er en datastruktur, der opfører sig som en computer-array, men også implementerer evnen til dynamisk at vokse størrelsen på arrayet efter behov. I modsætning til en intrinsic array-datatype, som ikke kan ændres til størrelse under programudførelse, kan ArrayList-strukturen vokse og formindske størrelsen på arrayet som svar på tilføjelse eller sletning af elementer. Det har en meget gunstig ydelsesprofil, der giver hurtig tilfældig adgang til dataindsamlingen. Der er imidlertid to tilfælde, hvor det er langsommere end nogle andre datastrukturer, nemlig tilføjelse og fjernelse af elementer fra midten af arrayet. De fleste objektorienterede programmeringssprog har en eller anden form for implementering af en sådan liste, selvom de undertiden kaldes dynamiske arrays.
Brug af en ArrayList giver et program muligheden for at få adgang til dataobjekter med et indeksnummer med det samme i stedet for at skulle gå gennem en hel sekvens af data for at finde en adresse, der kræves med sammenkædede lister. Med muligheden for at øge størrelsen på arrayet efter behov er det en meget afbalanceret tilgang, der overvejer både fleksibilitet og hastighed. Når elementer fjernes fra en sådan liste, reduceres arrayets størrelse desuden, hvilket frigør hukommelsesplads.
En fordel ved at bruge en ArrayList over nogle andre datastrukturer er, at et indpakningsobjekt ikke er nødvendigt for at indeholde de data, der gemmes. I tilfælde af en sammenkoblet liste eller en hash-tabel er det normalt nødvendigt med et separat objekt for at vedligeholde den teknik, der bruges til at holde og manipulere samlingen. Med en ArrayList er den eneste information, der er nødvendig om dataobjekterne, objektets adresse i hukommelsen. Dette betyder, at der vil være mindre brug af faste hukommelser, når du arbejder med denne type liste.
Et potentielt problem med at bruge en ArrayList kan komme fra implementerings- og hukommelsesstyringssystemet. De fleste arrays er tildelt som på hinanden følgende hukommelsesplaceringer. Så for at bruge en ArrayList af en bestemt størrelse, skal mindst den meget hukommelse være tilgængelig i en uafbrudt række af blokke. Den dynamiske matrix kunne ændre størrelsen på sig selv flere gange, så hukommelsesfragmentering kan forekomme og føre til en hukommelsestildelingsfejl, der stopper programudførelsen.
Udførelsen af en ArrayList svarer til den ved at bruge en standard array, selvom adgangstiderne er lidt langsommere, fordi matrixen er indkapslet i et objekt. Et eksempel, hvor en dynamisk matrix kan aftappe dramatisk, afhængigt af implementering, er, når størrelsen på arrayet skal ændres. Dette kan involvere kopiering af den aktuelle array til en ny matrix, der blev allokeret til den nye ønskede størrelse, hvilket forårsager en midlertidig nedbrydning i ydelsen. Det samme problem kan opstå, når du tilføjer eller fjerner et element fra midten af listen, hvilket får alle følgende elementer til at blive flyttet til et nyt sted.