為什么在某些情況下比HashMap性能好?
主要因為SparseArray不需要對key和value進行自動封裝(將原始類型封裝為對象類型,int封裝為Integer類型),結構比HashMap簡單,SparseArray內部主要使用了兩個一維數組來保存數據,一個保存key,另一個保存value。不需要額外的數據結構。
key為int才能使用,注意是int而不是Integer,這也是sparseArray效率提升的一個點,去掉了裝箱的操作。
100000條數據的存儲使用DDMS查看,hashMap的存儲空間14M左右,而SparseArray自由8M多幾乎是少了40%接近。
初始值10。
get原理:
通過二分查找找到key。
SparseArray是android里為<Interger,Object>這樣的Hashmap而專門寫的類,目的是提高內存效率,其核心是折半查找函數(binarySearch)。注意內存二字很重要,因為它僅僅提高內存效率,而不是提高執行效率,
它只適用于android系統(內存對android項目有多重要,地球人都知道)。SparseArray有兩個優點:1.避免了自動裝箱(auto-boxing),2.數據結構不會依賴于外部對象映射。我們知道HashMap 采用一種所謂的“Hash 算法”來決定每個元素的存儲位置,存放的都是數組元素的引用,通過每個對象的hash值來映射對象。而SparseArray則是用數組數據結構來保存映射,然后通過折半查找來找到對象。但其實一般來說,SparseArray執行效率比HashMap要慢一點,因為查找需要折半查找,而添加刪除則需要在數組中執行,而HashMap都是通過外部映射。但相對來說影響不大,最主要是SparseArray不需要開辟內存空間來額外存儲外部映射,從而節省內存
ArrayMap:
Arraymap中使用的是兩個數組進行存儲,一個數組存儲key,一個數組存儲value,內部的增刪改查都將會使用二分查找來進行,這個和SparseArray差不多,只不過sparseArray的key值只能是int型的,而Arraymap可以是map型,所以在數據量不大的情況下可以使用這兩個集合代替hashmap去優化性能;