DevCorner620

DevCorner: uno sguardo allo SparseArray

Giuseppe Tripodi

In quest’appuntamento del DevCorner vogliamo parlarvi di una piccola chicca: se non avete mai sentito parlare dello SparseArray non c’è poi da stupirsi molto, è una classe della quale potreste fare a meno nella vostra carriera da programmatore, ma una volta conosciuta probabilmente vi ritroverete ad utilizzarla più spesso di quanto vi sareste aspettati.

Sicuramente tutti conoscerete ed avrete utilizzato la classe Map di Java: per i pochi che non lo sapessero, si tratta di un componente che consente di creare un insieme di associazioni chiave->valore. Appartiene alla grande famiglia delle cosiddette Collections e potete vederla come un grande calderone in cui potete inserire quanti oggetti volete, assegnando ad ognuno di essi un identificativo con il quale richiamarlo.

Per gestire le mappe si utilizzano principalmente i metodi put() e get() che ovviamente servono per inserire un elemento e per richiamarlo. Tuttavia, capita spesso che ci si trovi ad assegnare un numero come chiave (o anche come valore!), facendo un’operazione come mappa.put(1,OggettoX): sebbene quest’operazione non restituisca nessun errore, affatica inutilmente la Dalvik, poiché Map accetta come parametri per chiave e valore solo oggetti e non interi.

In questi casi il numero viene automaticamente convertito in un Integer durante le operazioni di put e get, ma è qui che ci viene incontro lo SparseArray. Quest’ultimo si comporta esattamente come una mappa, con la grossa differenza dell’accettare i numeri come parametri, senza la necessità di riconvertirli.

Per questo motivo, in casi in cui dobbiamo utilizzare un intero come parametro, è più conveniente affidarsi ad uno SparseArray. La sintassi è veramente semplice, praticamente identica a quella di Map:

SparseArray array = new SparseArray();
array.put(0, "example object");
String value = array.get(0);
array.remove(0);

Esistono inoltre altri tipi di SparseArray, per mappare al meglio int, long o boolean:

  • LongSparseArray: utilizza chiavi di tipo long e oggetti come valori;
  • IntSparseArray: utilizza int sia come chiavi che come valori;
  • SparseBooleanArray: utilizza chiavi int e valori boolean;

Nell’esempio che potete scaricare dal forum abbiamo ciclato una Map e uno SparseArray per riempire una ProgressBar, in modo che sia evidente che la sintassi è praticamente identica ma lo SparseArray vince in termini di performance. Come sempre, se avete bisogno di aiuto potete chiedere supporto nella sezione Sviluppo del nostro forum: adesso che anche la “chicca” dello SparseArray si è aggiunta al vostro bagaglio da programmatori, non dimenticatevi di utilizzarla nei vostri progetti!

Fonte: Fonte