Android中有一套對於經常使用的集合本身的實現; 主要是減小內存消耗(客戶端對於數據量要求並不高可是對於內存要求儘量低);java
如下提到的三個集合應用場景都是數組
該集合類型能夠避免自動裝箱減小內存的消耗; 對於大量的數據性能不如Java提供的Map集合(二分查詢的缺陷);app
集合內部維護了兩個數組; 一個是對應key另一個對應value(這裏也就產生了有value可是沒有對應key的狀況能夠出現, 後面解釋如何產生這種狀況)函數
SparseArray支持泛型(自定義Value類型)性能
SparseIntArray這些就是避免自動裝箱的集合, 只支持固定的基本類型; 可是他們都只支持key的類型是int, 而且不支持迭代器遍歷;優化
SparseArray的函數spa
SparseArray<E> clone() // 查詢 E get(int key) E get(int key, E valueIfKeyNotFound) // 若是查詢不到返回-1 int indexOfKey(int key) int indexOfValue(E value) // 若是查詢不到返回默認值 E valueAt(int index) int keyAt(int index) // 增長 void append(int key, E value) void put(int key, E value) void setValueAt(int index, E value) // 刪除 void delete(int key) void remove(int key) void removeAt(int index) void removeAtRange(int index, int size) void clear() int size() String toString() 複製代碼
SparseArray有一些相同函數, 例如delete
和remove
; 兩個函數功能徹底相同;code
setValueAt
這個函數能夠不添加key向集合中添加value, 可是最終並不會算在toString
之中(而且不會影響size); get()
也沒法獲取到value;索引
可是能夠經過valueAt()
函數獲取到value值; 這種操做只有SparseArray能夠, 相似SparseIntArray都不支持setValueAt()
函數;內存
該集合類型和SparseArray一樣基於二分查詢, 對於千之內的數據量Google推薦使用, 大量數據一樣性能不佳;
而且該集合類型不能解決自動裝箱問題, 可是也能減小內存消耗;
相比SparseArray就是支持自定義Key的類型;
V put(K key, V value) void putAll(ArrayMap<? extends K, ? extends V> array) void putAll(Map<? extends K, ? extends V> map) V setValueAt(int index, V value) 複製代碼
V remove(Object key) boolean removeAll(Collection<?> collection) V removeAt(int index) void clear() 複製代碼
V get(Object key) K keyAt(int index) V valueAt(int index) int indexOfKey(Object key) boolean isEmpty() 複製代碼
沒有
indexOfValue()
Collection<V> values() Set<K> keySet() Set<Entry<K, V>> entrySet() 複製代碼
boolean containsAll(Collection<?> collection) boolean containsKey(Object key) boolean containsValue(Object value) void ensureCapacity(int minimumCapacity) boolean equals(Object object) int hashCode() boolean retainAll(Collection<?> collection) int size() String toString() 複製代碼
該集合和ArrayMap相似, 只不過不是映射關係而已; ArraySet支持迭代器;