"Hva med litt trening for hjernen din? Jeg håper den fortsatt fungerer."

"Tidligere, i tabellen over beholdere og samlinger så du at det samme grensesnittet kan ha flere implementeringer. Jeg skal nå fortelle deg hvorfor vi trenger det. Og hvordan ArrayList skiller seg fra LinkedList ."

"Tingen er at samlinger kan implementeres på forskjellige måter, og ingen implementering er alltid ideell. I en tilnærming er noen operasjoner raske, men andre er trege. Det motsatte kan være sant for en annen tilnærming. Det er ingen perfekt en-størrelse- en løsning som passer alle."

"Det er grunnen til at beslutningen ble tatt om å implementere flere versjoner av samme samling. Hver implementering bør optimaliseres for et smalt sett med operasjoner. Slik ble forskjellige samlinger til. La oss studere to klasser som eksempler: ArrayList og LinkedList ."

ArrayList vs. LinkedList - 1

"Internt er ArrayList implementert som en vanlig array . Det er derfor å sette inn et element i midten krever at vi først forskyver alle de etterfølgende elementene med ett, og deretter legger det nye elementet inn i det ledige sporet. Henting og innstilling av elementer (get, set ) er rask , siden disse operasjonene ganske enkelt adresserer det relevante array-elementet."

" LinkedList har en annen intern struktur. Den er implementert som en liste med sammenkoblede elementer : et sett med distinkte elementer, som hver lagrer referanser til neste og forrige elementer i listen. For å sette inn et element i midten av en slik liste, du trenger bare å endre referansene til dets fremtidige naboer. Men for å få element nr. 130, må du kjøre gjennom hvert objekt fra 0 til 130. Med andre ord, får og sett-operasjoner vil være trege . Se på følgende tabell :"

Beskrivelse Operasjon ArrayList LinkedList
Få et element Fort Langsom
Sett et element sett Fort Langsom
Legg til et element (til slutten av listen) Legg til Fort Fort
Sett inn et element (i en vilkårlig posisjon) add(i, verdi) Langsom Fort
Fjern et element fjerne Langsom Fort

"Jeg skjønner. Jeg begynner å forstå det nå. Er det noen kriterier eller regler som kan hjelpe meg å vite hvilken samling som er best i en bestemt situasjon?"

"For å holde det enkelt vil jeg gi deg følgende regel: hvis du ofte skal sette inn (eller fjerne) elementer midt i samlingen, er det bedre å bruke LinkedList . I alle andre tilfeller fungerer ArrayList bedre . "

"Vi skal fordype oss i hvordan de er strukturert i mer avanserte leksjoner, men foreløpig vil vi bare øve oss på å bruke dem."