2013-06-09 22 views
22

So che questo è possibile:Come convertire un SparrayArray in ArrayList?

Map<Integer, Object> map = new HashMap<Integer, Object>(); 
... 
List<Object> arrayList = new ArrayList<Object>(map.values()); 

Ma secondo Android SparseArray<Object> è più efficiente, quindi, mi chiedo se è possibile convertire un SparseArray-Arraylist.

Molto apprezzato qualsiasi input.

risposta

29

Questo otterrà solo i valori, ignorando divario tra gli indici (come la soluzione mappa esistente fa):

public static <C> List<C> asList(SparseArray<C> sparseArray) { 
    if (sparseArray == null) return null; 
    List<C> arrayList = new ArrayList<C>(sparseArray.size()); 
    for (int i = 0; i < sparseArray.size(); i++) 
     arrayList.add(sparseArray.valueAt(i)); 
    return arrayList; 
} 
+0

Grazie, ma questo sembra un modo noioso di farlo? conosci un altro modo? come la 'Lista arrayList = new ArrayList (map.values ​​());' per Mappa, ad esempio? – LuckyMe

+1

Questo è l'unico modo per farlo. Scrivilo con un metodo una volta, poi dimentica quanto sia noioso! – Nick

+3

Quanto overhead è la HashMap? Sembra che potrebbe essere meglio usare HashMap in un caso in cui è necessario un facile accesso all'array di valori anche quando si utilizza Integers come chiave, piuttosto che creare un ciclo che itera per generare quell'array. Ci sto pensando troppo? Devo andare a testare entrambi credo. – LocalPCGuy

0

ArrayMap si presenta come una scelta migliore, dal momento che è disponibile API 19.

Problemi correlati