"Wat dacht je van een beetje training voor je hersenen? Ik hoop dat het nog steeds werkt."
"Eerder zag je in de tabel met containers en collecties dat dezelfde interface meerdere implementaties kan hebben. Ik zal je nu vertellen waarom we dat nodig hebben. En waarin ArrayList verschilt van LinkedList ."
"Het punt is dat collecties op verschillende manieren kunnen worden geïmplementeerd en geen enkele implementatie is altijd ideaal. Bij de ene benadering zijn sommige bewerkingen snel, maar bij andere traag. Bij een andere benadering kan het tegenovergestelde waar zijn. Er is geen perfecte one-size- passende oplossing."
"Daarom is besloten om verschillende versies van dezelfde verzameling te implementeren. Elke implementatie moet worden geoptimaliseerd voor een beperkt aantal bewerkingen. Zo zijn verschillende verzamelingen ontstaan. Laten we twee klassen als voorbeeld bestuderen: ArrayList en LinkedList ."
"Intern is ArrayList geïmplementeerd als een gewone array . Daarom vereist het invoegen van een element in het midden dat we eerst alle opeenvolgende elementen met één verschuiven en vervolgens het nieuwe element in het vrije slot plaatsen. Elementen ophalen en instellen (get, set ) is snel , omdat deze bewerkingen eenvoudigweg het relevante array-element adresseren."
" LinkedList heeft een andere interne structuur. Het is geïmplementeerd als een lijst met onderling verbonden elementen : een reeks afzonderlijke elementen, die elk verwijzingen naar de volgende en vorige elementen in de lijst opslaan. Om een element in het midden van zo'n lijst in te voegen, u hoeft alleen de referenties van zijn toekomstige buren te wijzigen. Om element nr. 130 te krijgen, moet u echter elk object doorlopen van 0 tot 130. Met andere woorden, get- en set-bewerkingen zullen traag zijn . Kijk naar de volgende tabel :"
Beschrijving | Operatie | ArrayLijst | Gelinkte lijst |
---|---|---|---|
Krijg een element | krijgen | Snel | Langzaam |
Stel een onderdeel in | set | Snel | Langzaam |
Voeg een element toe (aan het einde van de lijst) | toevoegen | Snel | Snel |
Een element invoegen (op een willekeurige positie) | optellen(i, waarde) | Langzaam | Snel |
Verwijder een onderdeel | verwijderen | Langzaam | Snel |
"Ik snap het. Ik begin het nu te begrijpen. Zijn er criteria of regels die me kunnen helpen te weten welke collectie het beste is in een bepaalde situatie?"
"Om het simpel te houden, geef ik je de volgende regel: als je vaak elementen in het midden van de verzameling gaat invoegen (of verwijderen), kun je beter LinkedList gebruiken. In alle andere gevallen werkt ArrayList beter . "
"We zullen dieper ingaan op hoe ze zijn gestructureerd in meer geavanceerde lessen, maar voor nu oefenen we gewoon met het gebruik ervan."
GO TO FULL VERSION