Cercherei di spiegarlo con un esempio.
Due chef lavorano in un hotel a 5 stelle e sanno come fare 10 tipi di pizza. entrambi sono ugualmente bravi, ma il primo chef è lento. Motivo?
- Ogni volta che arriva un ordine, lo chef apre un libro di ricette e segue la procedura, gli ci vuole O(n) (o tempo lineare) per farlo.
- Il secondo chef si ricorda ogni ricetta per sentito dire, ha solo bisogno di lavorare per fare la pizza, che richiede O(1) (tempo costante).
Il primo chef è ListView, chiama findViewById() ogni volta che deve rendere una vista.
Il secondo chef è RecyclerView, tiene solo i riferimenti (ricorda la loro posizione usando la cache) alle viste non in uso, risparmiando così la chiamata findViewById().
Come si ottiene questo?
- L'adattatore generale usa l'iteratore per creare nuove viste e lega i dati ad esse proprio da quel dataset.
- RecyclerView fa uso di ViewHolders per default. Quindi, il Recycler Adapter invece di creare delle viste, crea dei ViewHolder che contengono le viste gonfiate. Una volta creato il ViewHolder viene messo nella cache e può essere riutilizzato se necessario.
Potevo entrare in più dettagli, ma non era il mio scopo. Il mio scopo era quello di farlo sembrare relazionabile.