"Ce zici de un mic antrenament pentru creierul tău? Sper că este încă în stare de funcționare."

„Mai devreme, în tabelul de containere și colecții ați văzut că aceeași interfață poate avea mai multe implementări. Acum vă voi spune de ce avem nevoie de asta. Și cum diferă ArrayList de LinkedList .”

„Chestia este că colecțiile pot fi implementate în moduri diferite și nicio implementare nu este întotdeauna ideală. Într-o abordare, unele operațiuni sunt rapide, dar altele sunt lente. Opusul poate fi adevărat pentru o altă abordare. Nu există o singură dimensiune perfectă. soluție potrivită pentru toate.”

"De aceea s-a luat decizia de a implementa mai multe versiuni ale aceleiași colecții. Fiecare implementare ar trebui optimizată pentru un set restrâns de operații. Așa au apărut colecții diferite. Să studiem ca exemple două clase: ArrayList și LinkedList ."

ArrayList vs. LinkedList - 1

„Intern, ArrayList este implementat ca o matrice obișnuită . De aceea, inserarea unui element în mijloc necesită ca mai întâi să deplasăm toate elementele următoare cu unul, apoi să punem noul element în slotul liber. Obținerea și setarea elementelor (get, set ) este rapidă , deoarece aceste operații se adresează pur și simplu elementului de matrice relevant."

" LinkedList are o structură internă diferită. Este implementată ca o listă cu elemente interconectate : un set de elemente distincte, fiecare dintre ele stochează referințe la elementele următoare și anterioare din listă. Pentru a insera un element în mijlocul unei astfel de liste, trebuie doar să modificați referințele viitorilor săi vecini.Cu toate acestea, pentru a obține elementul nr. 130, trebuie să rulați prin fiecare obiect de la 0 la 130. Cu alte cuvinte, operațiunile de obținere și setare vor fi lente . Uitați-vă la următorul tabel. :"

Descriere Operațiune ArrayList LinkedList
Obțineți un element obține Rapid Încet
Setați un element a stabilit Rapid Încet
Adăugați un element (la sfârșitul listei) adăuga Rapid Rapid
Inserați un element (la o poziție arbitrară) adaugă (i, valoare) Încet Rapid
Eliminați un element elimina Încet Rapid

"Înțeleg. Încep să înțeleg acum. Există criterii sau reguli care m-ar ajuta să știu care colecție este cea mai bună într-o anumită situație?"

„Pentru a fi simplu, vă voi da următoarea regulă: dacă veți insera (sau eliminați) frecvent elemente în mijlocul colecției, este mai bine să utilizați LinkedList . În toate celelalte cazuri, ArrayList funcționează mai bine .

„Vom aprofunda modul în care sunt structurate în lecții mai avansate, dar deocamdată ne vom exersa să le folosim.”