ArrayMap 和 SparseArray是位于android.util包下,是Android版本19起引入的
HashMap 是位于java.util包下
ArrayMap
我們先看下ArrayMap的源碼說明部分:

第一句就說了,ArrayMap是一個比HashMap內(nèi)存優(yōu)化更高效的鍵值對
ArrayMap維持了一個數(shù)組才承載map, 一個int[]承載hash值,一個Object[]才承載key/value
這樣就避免了為每個Entry創(chuàng)建一個額外的對象,也嘗試更加積極的控制size的增長(增長到極限之后,只需要將這名Entry復(fù)制到一個新數(shù)組里,不用重新創(chuàng)建hashMap)

ArrayMap并不適用于裝載大量的數(shù)據(jù)條目,因為查找需要二分法檢索,添加和刪除需要插入以及刪除數(shù)組中的項,它比HashMap的效率要低,如果裝載幾百條數(shù)據(jù),ArrayMap效率并不顯著,低于50%
ArrayMap是用來更好的內(nèi)存使用的,不像其他大多數(shù)Java容器,當(dāng)item被移除時,它會減少數(shù)組大小。
總結(jié)一下ArrayMap的特點:
1.ArrayMap是Android特有的api,用在移動端,所以它主要是提高內(nèi)存效率。
2.ArrayMap比傳統(tǒng)的HashMap慢,所以ArrayMap不適合包含大數(shù)據(jù)的處理,因為添加和刪除元素的時候需要使用二分搜索來查找元素。
3.ArrayMap會在remove item的時候收縮數(shù)組。
4.ArrayMap不是線程安全的。
SparseArray

SparseArray 稀疏數(shù)組應(yīng)用場景是相對稀少的數(shù)據(jù),一般是幾百以內(nèi)的數(shù)據(jù)性能相對HashMap要好,大概提升0-50%的性能。SparseArray是用Integer作為鍵映射對象。
我們來總結(jié)一下:
1 在item數(shù)量在百以下時,建議使用ArrayMap 和SparseArray代替HashMap,來優(yōu)化內(nèi)存。
2 SparseArray的key是Int