"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 ."

ArrayList vs. LinkedList - 1

"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 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."