Hva er en ArrayList?
En ArrayList innen dataprogrammering er en datastruktur som oppfører seg som en datamaskinoppstilling, men også implementerer muligheten til å dynamisk utvide størrelsen på matrisen etter behov. I motsetning til en egenartet array-datatype, som ikke kan endres størrelse under programutførelse, kan ArrayList-strukturen vokse og krympe størrelsen på matrisen som svar på tillegg eller sletting av elementer. Den har en veldig gunstig ytelsesprofil, som gir rask tilfeldig tilgang til datainnsamlingen. Det er imidlertid to tilfeller der det går tregere enn noen andre datastrukturer, nemlig tillegg og fjerning av elementer fra midten av matrisen. De fleste objektorienterte programmeringsspråk har en slags implementering av en slik liste, selv om de noen ganger kalles dynamiske matriser.
Å bruke en ArrayList gir et program muligheten til å få tilgang til dataobjekter med et indeksnummer umiddelbart i stedet for å måtte gå gjennom en hel sekvens med data for å finne en adresse, som kreves med koblede lister. Med muligheten til å øke størrelsen på matrisen etter behov, er det en veldig balansert tilnærming som vurderer både fleksibilitet og hastighet. I tillegg, når elementer fjernes fra en slik liste, reduseres størrelsen på matrisen, og frigjør minne.
En fordel med å bruke en ArrayList over noen andre datastrukturer er at et wrapper-objekt ikke er nødvendig for å inneholde dataene som blir lagret. Når det gjelder en koblet liste eller et hasjbord, er det vanligvis nødvendig med et eget objekt for å opprettholde teknikken som brukes til å holde og manipulere samlingen. Med en ArrayList er den eneste informasjonen som trengs om dataobjektene adressen til objektet i minnet. Dette betyr at det blir mindre minnebruk når du arbeider med denne typen lister.
Et potensielt problem med bruk av en ArrayList kan komme fra implementerings- og minnestyringssystemet. De fleste matriser blir tildelt som påfølgende minneplasseringer. Så for å bruke en ArrayList av en viss størrelse, må minst det mye minne være tilgjengelig i en uavbrutt sekvens av blokker. Den dynamiske arrayen kan endre størrelse på seg selv flere ganger, slik at minnefragmentering kan oppstå og føre til en hukommelsesfordelingssvikt, og stoppe utførelsen av programmet.
Ytelsen til en ArrayList er lik den ved å bruke en standard matrise, selv om tilgangstidene er litt tregere fordi matrisen er innkapslet i et objekt. Et eksempel der en dynamisk matrise kan avta dramatisk, avhengig av implementering, er når størrelsen på matrisen må endres. Dette kan innebære å kopiere den aktuelle arrayen til en ny matrise som ble tildelt den nye ønsket størrelsen, forårsake en midlertidig forringelse i ytelsen. Det samme problemet kan oppstå når du legger til eller fjerner et element fra midten av listen, og gjør at alle følgende elementer må flyttes til et nytt sted.