"Hvad med lidt træning for din hjerne? Jeg håber, den stadig fungerer."
"Tidligere så du i tabellen over containere og samlinger, at den samme grænseflade kan have flere implementeringer. Jeg vil nu fortælle dig, hvorfor vi har brug for det. Og hvordan ArrayList adskiller sig fra LinkedList ."
"Sagen er, at samlinger kan implementeres på forskellige måder, og ingen implementering er altid ideel. I én tilgang er nogle operationer hurtige, men andre er langsomme. Det modsatte kan være tilfældet for en anden tilgang. Der er ingen perfekt one-size- en passende løsning."
"Derfor blev beslutningen taget om at implementere flere versioner af den samme samling. Hver implementering skulle optimeres til nogle snævre sæt operationer. Sådan opstod forskellige samlinger. Lad os studere to klasser som eksempler: ArrayList og LinkedList ."
"Internt er ArrayList implementeret som et almindeligt array . Det er derfor, at indsættelse af et element i midten kræver, at vi først flytter alle de efterfølgende elementer med ét, og derefter sætter det nye element ind i den frie plads. Hentning og indstilling af elementer (get, set ) er hurtig , da disse operationer blot adresserer det relevante array-element."
" LinkedList har en anden intern struktur. Den er implementeret som en liste med indbyrdes forbundne elementer : et sæt adskilte elementer, som hver især gemmer referencer til de næste og forrige elementer på listen. For at indsætte et element i midten af en sådan liste, du behøver kun at ændre referencerne for dets fremtidige naboer. Men for at få element nr. 130, skal du køre gennem hvert objekt fra 0 til 130. Med andre ord vil få og sæt-operationer være langsomme . Se på følgende tabel :"
Beskrivelse | Operation | ArrayList | LinkedList |
---|---|---|---|
Få et element | få | Hurtig | Langsom |
Indstil et element | sæt | Hurtig | Langsom |
Tilføj et element (til slutningen af listen) | tilføje | Hurtig | Hurtig |
Indsæt et element (på en vilkårlig position) | tilføje(i, værdi) | Langsom | Hurtig |
Fjern et element | fjerne | Langsom | Hurtig |
"Jeg forstår det. Jeg begynder at forstå det nu. Er der nogle kriterier eller regler, der vil hjælpe mig med at vide, hvilken samling der er bedst i en bestemt situation?"
"For at holde det simpelt, vil jeg give dig følgende regel: Hvis du ofte vil indsætte (eller fjerne) elementer midt i samlingen, er det bedre at bruge LinkedList. I alle andre tilfælde fungerer ArrayList bedre . "
"Vi vil dykke ned i, hvordan de er struktureret i mere avancerede lektioner, men indtil videre vil vi bare øve os i at bruge dem."
GO TO FULL VERSION