1. Hvordan ArrayList
er strukturert
ArrayList
er Java-klassen som oftest brukes til å lagre elementer. Så hvordan fungerer ArrayList
det og hvorfor liker alle det så godt?
Strukturen til ArrayList
er enkel og genial. Hvert ArrayList
objekt inneholder to felt:
- En rekke elementer
- En
size
variabel som lagrer antall elementer i listen
Internt ArrayList
inneholder et objekt en høyst ordinær matrise! Men det er ikke alt. Det er også en størrelsesvariabel , som lagrer lengden på listen. Slik fungerer det:
Til å begynne med er lengden på matrisen inne i listen 10. Og variabelen size
er 0.
Hvis du legger til et element i listen, vil det bli lagret i den 0. cellen i matrisen, og size
vil øke til 1.
Hvis du legger til ett element til, vil det bli lagret i 1. celle, og size
vil igjen øke med 1 og bli lik to.
Hvis du legger til et annet element når det ikke er mer plass i matrisen, skjer følgende i metoden add()
:
- En ny matrise opprettes som er halvannen ganger lengden av den forrige
- Alle elementene i den gamle matrisen kopieres til den nye matrisen.
- I
ArrayList
objektet erstatter en referanse til den nye matrisen referansen til den gamle . - Det beståtte elementet lagres i den 10. cellen i den nye matrisen.
- Størrelsesvariabelen øker med 1 og vil nå være lik 11
Noe lignende skjer når du legger til (sett inn) et element i midten av listen. De eksisterende elementene forskyves med 1 til høyre, og det beståtte elementet skrives til den nylig frigjorte cellen i matrisen.
Nå skal vi vurdere de mest grunnleggende scenariene som involverer lister:
2. Legge til et element i enArrayList
La oss ta en titt på hva som skjer inne i listen når elementer legges til den. Umiddelbart etter at et ArrayList-objekt er opprettet, har vi noe slikt i minnet:
Vi har et ArrayList
objekt som inneholder to felt (to variabler): en beholder (matrisen data
) og antall lagrede elementer ( size
). Variabelen data
lagrer en referanse til en beholder (array) som kan lagre 10 elementer.
Hvis vi bestemmer oss for å legge til tallet 5 til matrisen, får vi følgende bilde:
Matrisen lagrer nå element 5, og size == 1
.
Hvis noen kaller size()
metoden på ArrayList
objektet vårt nå, vil returverdien være antall elementer som er lagret i listen: 1. Antall elementer i listen er ikke det samme som lagringskapasiteten til matrisen.
Verken den nåværende lagringskapasiteten eller selve matrisen vil noen gang være tilgjengelig (synlig) utenfor objektet ArrayList
. Dette er og vil alltid være ArrayList
s interne data.
La oss legge til 7 flere tall til listen: 10, 20, 30, 40, 50, 60, 70.
Nå vil minnet se slik ut:
Hvis du kaller size()
metoden nå, vil den returnere tallet 8, som er det nye antallet elementer i listen. Denne verdien har ingenting å gjøre med størrelsen på den interne matrisen.
Det er én overforenkling i dette bildet.
Klassen ArrayList
kan ikke lagre primitive typer, så den bruker Integer
typen i stedet for int
. Beholderen lagrer ikke direkte verdiene {5, 10, 20, 30, 40, 50, 60, 70}, men referanser til Integer
objekter. Alle de tomme cellene i containerlageret null
.
3. Øke lengden på en liste
La oss ta en titt på hva som skjer inne i en liste når det ikke er flere tomme celler i den interne matrisen.
Anta at vi har en liste med 10 elementer:
Vi bestemmer oss for å legge til tallet 100 . Dette er hva som skjer i add()
metoden:
Trinn 1 — Opprett en ny matrise:
Trinn 2 — Kopier alle elementer fra den gamle matrisen til den nye:
Trinn 3 — Erstatt den gamle matrisen (endre referansen til objektets ArrayList
interne matrise):
Trinn 4 — Legg til det nye nummeret, som er det vi har jobbet så hardt for å oppnå:
GO TO FULL VERSION