"Mit szólnál egy kis edzéshez az agyadnak? Remélem, még mindig működik."

"Korábban a konténerek és gyűjtemények táblázatában láthatta, hogy ugyanannak a felületnek több megvalósítása is lehet. Most elmondom, miért van erre szükségünk. És miben különbözik az ArrayList a LinkedList- től ."

"Az a helyzet, hogy a gyűjteményeket többféleképpen lehet megvalósítani, és egyetlen megvalósítás sem mindig ideális. Az egyik megközelítésben egyes műveletek gyorsak, mások viszont lassúak. Egy másik megközelítésre ennek az ellenkezője lehet igaz. Nincs tökéletes egy méret. mindenre alkalmas megoldás."

"Ezért az a döntés született, hogy ugyanannak a gyűjteménynek több verzióját is implementálják. Mindegyik implementációt valamilyen szűk műveleti halmazra kell optimalizálni. Így jöttek létre a különböző gyűjtemények. Nézzünk meg példaként két osztályt: ArrayList és LinkedList ."

ArrayList vs. LinkedList – 1

"Belsőleg az ArrayList egy közönséges tömbként valósul meg . Éppen ezért egy elem beszúrása középre megköveteli, hogy először az összes következő elemet eggyel eltoljuk, majd az új elemet a szabad helybe helyezzük. Elemek beszerzése és beállítása (get, set ) gyors , mivel ezek a műveletek egyszerűen a megfelelő tömbelemre vonatkoznak."

" A LinkedList belső szerkezete eltérő. Listaként valósítják meg egymáshoz kapcsolódó elemekkel : különálló elemek halmaza, amelyek mindegyike hivatkozásokat tárol a lista következő és előző elemeire. Ha egy elemet szeretne beszúrni egy ilyen lista közepére, csak a leendő szomszédjainak hivatkozásait kell megváltoztatni. A 130-as számú elemhez azonban minden objektumot 0-tól 130-ig kell végigfutnia. Más szóval, a get és set műveletek lassúak lesznek . Nézze meg a következő táblázatot :"

Leírás Művelet Tömb lista LinkedList
Szerezz egy elemet kap Gyors Lassú
Állítson be egy elemet készlet Gyors Lassú
Elem hozzáadása (a lista végére) add hozzá Gyors Gyors
Elem beszúrása (tetszőleges pozícióba) add(i, érték) Lassú Gyors
Távolítson el egy elemet távolítsa el Lassú Gyors

"Értem. Most kezdem megérteni. Vannak olyan kritériumok vagy szabályok, amelyek segítenek megtudnom, melyik gyűjtemény a legjobb egy adott helyzetben?"

"Az egyszerűség kedvéért a következő szabályt adom: ha gyakran fogsz elemeket beszúrni (vagy eltávolítani) a gyűjtemény közepébe, akkor jobb a LinkedList használata. Minden más esetben az ArrayList jobban működik . "

"A fejlettebb leckéken megvizsgáljuk, hogyan épülnek fel, de egyelőre csak a használatukat gyakoroljuk."