更适合Android的集合 SparseArray/ArrayMap/ArraySet

Android中有一套对于经常使用的集合本身的实现; 主要是减小内存消耗(客户端对于数据量要求并不高可是对于内存要求尽量低);java

如下提到的三个集合应用场景都是数组

  • 千级如下适用, 大量数据不适用(二分查找缺陷), 由于Android基本上不多涉及到大量数据因此能够普遍应用;
  • 内存优化
  • 所有都支持索引(这是Java中的Map和Set集合不具有的)

SparseArray

该集合类型能够避免自动装箱减小内存的消耗; 对于大量的数据性能不如Java提供的Map集合(二分查询的缺陷);app

集合内部维护了两个数组; 一个是对应key另一个对应value(这里也就产生了有value可是没有对应key的状况能够出现, 后面解释如何产生这种状况)函数

  • SparseArray
  • SparseIntArray
  • SparseLongArray
  • SparseBooleanArray

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有一些相同函数, 例如deleteremove; 两个函数功能彻底相同;code

setValueAt这个函数能够不添加key向集合中添加value, 可是最终并不会算在toString之中(而且不会影响size); get()也没法获取到value;索引

可是能够经过valueAt()函数获取到value值; 这种操做只有SparseArray能够, 相似SparseIntArray都不支持setValueAt()函数;内存

ArrayMap

该集合类型和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() 复制代码

ArraySet

该集合和ArrayMap相似, 只不过不是映射关系而已; ArraySet支持迭代器;

相关文章
相关标签/搜索