2013-06-09 24 views
22

Bunun mümkün olduğunu biliyoruz: android SparseArray<Object> içinSparseArray, ArrayList'e nasıl dönüştürülür?

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

Fakat göre daha verimlidir, SparseArrayArraylist dönüştürmek mümkün olup olmadığını dolayısıyla merak ediyorum.

Herhangi bir girdi için çok teşekkür ederiz. (Mevcut Harita çözümü yaptığı gibi)

cevap

29
Bu

endeksleri arasındaki boşlukları göz ardı sadece değerlerini alacak:

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

Teşekkür API beri mevcuttur, daha iyi bir seçenek gibi görünüyor, ama bu bunu yapmak için sıkıcı bir yol gibi görünüyor? başka bir yol biliyor musun? Örneğin, Harita için arrayList = new ArrayList (map.values ​​()); – LuckyMe

+1

Bunu yapmanın tek yolu budur. Bir kez bir yöntemle yaz, sonra ne kadar sıkıcı olduğunu unut! – Nick

+3

HashMap ne kadardır? Bu arraylist oluşturmak için yineleyen bir döngü oluşturmak yerine Integers anahtar olarak kullanıldığında bile değerlerin arraylistine kolay erişime ihtiyaç duyduğunuz durumlarda HashMap'i kullanmak daha iyi olabilir. Bunu muhtaç mıyım? Her ikisini de test etmem gerekiyor sanırım. – LocalPCGuy

İlgili konular