"Che ne dici di un po' di allenamento per il tuo cervello? Spero che funzioni ancora."

"In precedenza, nella tabella dei contenitori e delle raccolte hai visto che la stessa interfaccia può avere più implementazioni. Ora ti dirò perché ne abbiamo bisogno. E in che modo ArrayList differisce da LinkedList ."

"Il fatto è che le raccolte possono essere implementate in modi diversi e nessuna implementazione è sempre l'ideale. In un approccio, alcune operazioni sono veloci, ma altre sono lente. L'opposto può essere vero per un altro approccio . soluzione adatta a tutti".

"Ecco perché è stata presa la decisione di implementare diverse versioni della stessa raccolta. Ogni implementazione dovrebbe essere ottimizzata per un insieme ristretto di operazioni. Ecco come sono nate diverse raccolte. Studiamo due classi come esempi: ArrayList e LinkedList ."

ArrayList vs LinkedList - 1

"Internamente, ArrayList è implementato come un normale array . Ecco perché l'inserimento di un elemento nel mezzo richiede che prima spostiamo tutti gli elementi successivi di uno, quindi inseriamo il nuovo elemento nello slot libero. Ottenere e impostare elementi (get, set ) è fast , poiché queste operazioni riguardano semplicemente l'elemento dell'array pertinente."

" LinkedList ha una struttura interna diversa. È implementato come un elenco con elementi interconnessi : un insieme di elementi distinti, ognuno dei quali memorizza i riferimenti agli elementi successivi e precedenti nell'elenco. Per inserire un elemento nel mezzo di tale elenco, devi solo cambiare i riferimenti dei suoi futuri vicini.Tuttavia , per ottenere l'elemento n.130, devi scorrere ogni oggetto da 0 a 130. In altre parole, le operazioni get e set saranno lente.Guarda la tabella seguente :"

Descrizione Operazione Lista di array Lista collegata
Ottieni un elemento Ottenere Veloce Lento
Imposta un elemento impostato Veloce Lento
Aggiungi un elemento (alla fine dell'elenco) aggiungere Veloce Veloce
Inserisci un elemento (in una posizione arbitraria) add(io, valore) Lento Veloce
Rimuovi un elemento rimuovere Lento Veloce

"Capisco. Sto cominciando a capirlo ora. Ci sono criteri o regole che mi aiuterebbero a sapere quale collezione è la migliore in una situazione particolare?"

"Per semplificare, ti darò la seguente regola: se intendi inserire (o rimuovere) frequentemente elementi nel mezzo della raccolta, è meglio usare LinkedList . In tutti gli altri casi, ArrayList funziona meglio . "

"Approfondiremo come sono strutturati in lezioni più avanzate, ma per ora ci eserciteremo solo a usarli."