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支持迭代器;