2013-06-09 42 views
22

Tôi biết điều này là có thể:Làm thế nào để chuyển đổi một SparseArray thành ArrayList?

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

Nhưng theo android SparseArray<Object> là hiệu quả hơn, do đó, tôi tự hỏi nếu nó có thể chuyển đổi một SparseArray-Arraylist.

Rất nhiều đánh giá cao mọi đầu vào.

Trả lời

29

này sẽ nhận được chỉ là những giá trị, bỏ qua khoảng trống giữa các chỉ số (như bạn giải pháp Bản đồ hiện không):

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

Cảm ơn, nhưng điều này có vẻ giống như một cách tẻ nhạt? bạn có biết cách khác không? ví dụ như 'List arrayList = new ArrayList (map.values ​​());' cho Bản đồ chẳng hạn? – LuckyMe

+1

Đây là cách duy nhất để làm điều đó. Viết nó trong một phương pháp một lần, sau đó quên đi nó buồn tẻ như thế nào! – Nick

+3

Bao nhiêu chi phí là HashMap? Có vẻ như tốt hơn nên sử dụng HashMap trong trường hợp bạn cần truy cập dễ dàng vào danh sách mảng các giá trị ngay cả khi sử dụng Số nguyên làm khóa, thay vì tạo vòng lặp lặp lại để tạo danh sách mảng đó. Tôi có bị lật đổ không? Cần phải đi kiểm tra cả hai tôi đoán. – LocalPCGuy

0

ArrayMap trông giống như một lựa chọn tốt hơn, trong đó có sẵn từ API 19.

Các vấn đề liên quan