Android——效能優化之SparseArray
阿新 • • 發佈:2018-11-01
相信大家都用過HashMap
用來存放鍵值對,最近在專案中使用HashMap
的時候發現,有時候 IDE 會提示我這裡的HashMap
可以用SparseArray
或者SparseIntArray
等等來代替。
SparseArray(稀疏陣列).它是Android內部特有的api,標準的jdk是沒有這個類的.在Android內部用來替代HashMap<Integer,E>這種形式,使用SparseArray更加節省記憶體空間的使用,SparseArray也是以key和value對資料進行儲存的.使用的時候只需要指定value的型別即可.並且key不需要封裝成物件型別.
首先是建立:
SparseArray<Student> sparseArray = new SparseArray<>();
SparseArray<Student> sparseArray = new SparseArray<>(capacity);//這裡是可以指定長度的
插入:
sparseArray.put(int key,Student value);// 這裡SparseArray存放的鍵值對中的鍵是int型的資料
獲取:
sparseArray.get(int key); sparseArray.get(int key,Student valueIfNotFound);
刪除:
sparseArray.remove(int key);// 通過int型別的鍵刪除指定的值
index:
因為是可以替代HashMap的,前面的方法和其沒有太大區別。而這個index
就是SparseArray
所特有的屬性了,SparseArray
從名字上看就能猜到跟陣列有關係,事實上他底層是兩條陣列,一組存放key
,一組存放value
,知道了這一點應該能猜到index
的作用了...
sparseArray.indexOfKey(int key); sparseArray.indexOfValue(T value); sparseArray.keyAt(int index); sparseArray.valueAt(int index); sparseArray.setValueAt(int index); sparseArray.removeAt(int index); sparseArray.removeAt(int index,int size);
注:通過對SparseArray[
index]底層原始碼的分析---SparseArray
每次的插入方式都需要呼叫二分查詢.因此這樣在倒序插入的時候會導致情況非常的糟糕,效率上絕對輸給了HashMap學過資料結構的大家都知道.Map在插入的時候會對衝突因子做出相應的決策.有非常好的處理衝突的方式.不需要遍歷每一個值.因此無論是倒序還是正序插入的效率取決於處理衝突的方式,因此插入時犧牲的時間基本是相同的.