2013-06-09 29 views
22

Ich weiß, das ist möglich:Wie konvertiert man ein SparseArray in ArrayList?

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

Aber nach android SparseArray<Object> effizienter ist, damit ich frage mich, ob es möglich ist, ein SparseArray-Arraylist zu konvertieren.

Vielen schätzen jeden Eingang.

Antwort

29

Dies wird nur die Werte erhalten, Lücken zwischen den Indizes ignorieren (wie Ihre bestehende Karte Lösung der Fall ist):

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

Dank zur Verfügung steht, aber das scheint eine langweilige Art, es zu tun? kennst du einen anderen Weg? wie die 'Liste arrayList = new ArrayList (map.values ​​()); 'für Map, zum Beispiel? – LuckyMe

+1

Dies ist der einzige Weg, dies zu tun. Schreiben Sie es einmal in eine Methode und vergessen Sie dann, wie langwierig es ist! – Nick

+3

Wie viel Overhead ist die HashMap? Es scheint, als wäre es besser, HashMap in einem Fall zu verwenden, in dem Sie einfachen Zugriff auf die ArrayListe von Werten benötigen, selbst wenn Sie Ganzzahlen als Schlüssel verwenden, anstatt eine Schleife zu erstellen, die diese Arraylist iteriert. Übertreibe ich es? Müssen beide testen gehen, denke ich. – LocalPCGuy

0

ArrayMap wie eine bessere Wahl sieht, die seit API 19.

Verwandte Themen