AndroidCome usare SparseArray


introduzione

Un SparseArray è un'alternativa per una Map . Una Map richiede che le sue chiavi siano oggetti. Il fenomeno dell'autoboxing si verifica quando vogliamo usare un valore int primitivo come chiave. Il compilatore converte automaticamente i valori primitivi nei loro tipi di box (ad es. int in Integer ). La differenza nel footprint della memoria è notevole: int usa 4 byte, Integer usa 16 byte. Un SparseArray utilizza int come valore chiave.

Osservazioni

Vantaggio:

  • Meno utilizzo della memoria (a causa delle chiavi primitive).
  • Nessun auto-box.

Svantaggio:

  • SparseArray utilizza la ricerca binaria per trovare il valore (O (log n)), quindi potrebbe non essere la soluzione migliore se si deve lavorare con un numero elevato di elementi (usare HashMap).

Esistono diverse varianti della famiglia: -SparseArray <Integer, Object> -SparseBooleanArray <Integer, Boolean> -SparseIntArray <Integer, Integer> -SparseLongArray <Integer, Long> -LongSparseArray <Long, Object> -LongSparseLongArray <Long, Long >

Operazioni SparseArray

  • aggiungendo element - put (int, x): aggiunge una mappatura dalla chiave specificata al valore specificato, sostituendo la mappatura precedente dalla chiave specificata se ce n'era una. - append (int, x): inserisce una coppia chiave / valore nell'array, ottimizzando il caso in cui la chiave è maggiore di tutte le chiavi esistenti nell'array. Dovresti usare append () in caso di chiavi sequenziali per ottimizzare le prestazioni. Altrimenti put () va bene.

  • remove element - delete (int): rimuove il mapping dalla chiave specificata, se ce n'era. - removeAt (int): rimuove il mapping sull'indice specificato. - removeAtRange (int, int): rimuove un intervallo di mapping come batch.

  • accessing element - get (int): Ottiene l'int mappato dalla chiave specificata, o 0 se non è stata effettuata alcuna mappatura. - get (int, E): ottiene l'int mappato dalla chiave specificata, o il valore specificato se non è stata effettuata alcuna mappatura. - valueAt (int): Dato un indice compreso nell'intervallo 0 ... size () - 1, restituisce il valore dal mapping di valori-chiave indexth che questo SparseIntArray memorizza. Gli indici sono ordinati in ordine crescente.

  • ricerca indice / chiave - keyAt (int): Dato un indice compreso nell'intervallo 0 ... size () - 1, restituisce la chiave dal mapping del valore-chiave indexth memorizzato da SparseIntArray. Gli indici sono ordinati in ordine crescente. - valueAt (int): Dato un indice compreso nell'intervallo 0 ... size () - 1, restituisce il valore dal mapping di valori-chiave indexth che questo SparseIntArray memorizza. Gli indici sono ordinati in ordine crescente. - indexOfKey (int): restituisce l'indice per il quale keyAt (int) restituisce la chiave specificata o un numero negativo se la chiave specificata non è mappata. - indexOfValue (E): restituisce un indice per il quale valueAt (int) restituisce la chiave specificata o un numero negativo se nessuna chiave esegue la mappatura sul valore specificato. Fai attenzione che questa è una ricerca lineare, a differenza delle ricerche per chiave, e che più chiavi possono mappare allo stesso valore e questo ne troverà solo uno. La differenza nel loro impronta di memoria è evidente: l'int utilizza 4 byte, il numero intero utilizza 16 byte.SparseArray utilizza int come valore chiave.

Come usare SparseArray Esempi correlati