1. 程式人生 > >SparseArray ArrayMap HashMap 區別

SparseArray ArrayMap HashMap 區別

一直以來,在專案中需要使用到這類的資料結構式,都習慣性的想到HashMap,也沒有關心過
其他的問題。
SparseArray
最近偶然看到SparseArray這種資料結構,才發現原來android內部是推薦使用這種資料結構的,由於Android對應的裝置記憶體相對來說比較小,因而記憶體是比較稀罕的東西,而SparseArray
恰好是儲存的記憶體相對來說比較小。在某些條件下效能更好,主要是由於它避免了對key的自己主動裝箱(int轉為Integer型別),它內部則是通過兩個陣列來進行資料儲存的。一個儲存key,另外一個儲存value,為了優化效能,它內部對資料還採取了壓縮的方式來表示稀疏陣列的資料,從而節約記憶體空間。
private int[] mKeys;
private Object[] mValues;這是SparseArray原始碼中定義的兩個陣列物件,很容易就可以知道mKey是儲存key值得陣列,而mValues就是儲存value值得資料物件。


這是原始碼中取得value值的程式碼片段,可以看出是通過二分法來獲取value值的,同樣put也是這樣去插入值得.
所以在獲取資料的時候,比hashMap去遍歷查詢要快的多。當然在key值上面只能使用int型別可能是這個資料結構的不足之處吧。