Android應用效能優化之使用SparseArray替代HashMap
原文地址:http://liuzhichao.com/p/832.html
HashMap是java裡比較常用的一個集合類,我比較習慣用來快取一些處理後的結果。最近在做一個Android專案,在程式碼中定義這樣一個變數,例項化時,Eclipse卻給出了一個 performance 警告。
意思就是說用SparseArray<E>來替代,以獲取更好效能。老實說,對SparseArray並不熟悉,第一感覺應該是Android提供的一個類。按住Ctrl點選進入SparseArray的原始碼,果不其然,確定是Android提供的一個工具類。
單純從字面上來理解,SparseArray指的是稀疏陣列(Sparse array)
假設有一個9*7的陣列,其內容如下:
在此陣列中,共有63個空間,但卻只使用了5個元素,造成58個元素空間的浪費。以下我們就使用稀疏陣列重新來定義這個陣列:
其中在稀疏陣列中第一部分所記錄的是原陣列的列數和行數以及元素使用的個數、第二部分所記錄的是原陣列中元素的位置和內容。經過壓縮之後,原來需要宣告大小為63的陣列,而使用壓縮後,只需要宣告大小為6*3的陣列,僅需18個儲存空間。
繼續閱讀SparseArray的原始碼,從構造方法我們可以看出,它和一般的List一樣,可以預先設定容器大小,預設的大小是10:
1 |
public SparseArray()
{ |
2 |
this ( 10 ); |
3 |
} |
4 |
5 |
public SparseArray( int initialCapacity)
{ |
6 |
initialCapacity
= ArrayUtils.idealIntArraySize(initialCapacity); |
7 |