Android中有一套对于常用的集合自己的实现; 主要是减少内存消耗(客户端对于数据量要求并不高但是对于内存要求尽可能低);

以下提到的三个集合应用场景都是

  • 千级以下适用, 大量数据不适用(二分查找缺陷), 因为Android基本上很少涉及到大量数据所以可以广泛应用;
  • 内存优化
  • 全部都支持索引(这是Java中的Map和Set集合不具备的)

SparseArray

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

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

  • SparseArray
  • SparseIntArray
  • SparseLongArray
  • SparseBooleanArray

SparseArray支持泛型(自定义Value类型)

SparseIntArray这些就是避免自动装箱的集合, 只支持固定的基本类型; 但是他们都只支持key的类型是int, 并且不支持迭代器遍历;

SparseArray的函数

SparseArrayclone()// 查询Eget(int key)Eget(int key, E valueIfKeyNotFound)// 如果查询不到返回-1intindexOfKey(int key)intindexOfValue(E value)// 如果查询不到返回默认值EvalueAt(int index)intkeyAt(int index)// 增加voidappend(int key, E value)voidput(int key, E value)voidsetValueAt(int index, E value)// 删除voiddelete(int key)voidremove(int key)voidremoveAt(int index)voidremoveAtRange(int index, int size)voidclear()    intsize()StringtoString()复制代码

SparseArray有一些相同函数, 例如deleteremove; 两个函数功能完全相同;

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

但是可以通过valueAt()函数获取到value值; 这种操作只有SparseArray可以, 类似SparseIntArray都不支持setValueAt()函数;

ArrayMap

该集合类型和SparseArray同样基于二分查询, 对于千以内的数据量Google推荐使用, 大量数据同样性能不佳;

并且该集合类型不能解决自动装箱问题, 但是也能减少内存消耗;

相比SparseArray就是支持自定义Key的类型;

增加

Vput(K key, V value)voidputAll(ArrayMap<? extends K, ? extends V> array)voidputAll(Map<? extends K, ? extends V> map)VsetValueAt(int index, V value)复制代码

删除

Vremove(Object key)booleanremoveAll(Collection<?> collection)VremoveAt(int index)voidclear()复制代码

查询

Vget(Object key)KkeyAt(int index)VvalueAt(int index)intindexOfKey(Object key)booleanisEmpty()复制代码

没有indexOfValue()

遍历

Collectionvalues()SetkeySet()Set>entrySet()复制代码

其他

booleancontainsAll(Collection<?> collection)booleancontainsKey(Object key)booleancontainsValue(Object value)voidensureCapacity(int minimumCapacity)booleanequals(Object object)inthashCode()booleanretainAll(Collection<?> collection)intsize()StringtoString()复制代码

ArraySet

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

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android实现动态高斯模糊效果示例代码
  3. Android(安卓)WebView填坑记录
  4. power_supply子系统笔记
  5. 史上最详细创建 Android(安卓)AIDL 远程服务步骤
  6. [置顶] Android与H5交互(混合开发)
  7. Android中的状态机(续)
  8. Android(安卓)上传图片到 Asp.Net 服务器的问题
  9. Android(安卓)Studio混淆相关总结

随机推荐

  1. android 相对定位布局方向 RelativeLayou
  2. android photoview 图片放大缩放功能 Ima
  3. Android(安卓)Service服务的相关介绍
  4. android所有控件
  5. android单选按钮RadioGroup的详细使用
  6. Android 单选队列 RadioGroup与RadioButt
  7. 48.Android(安卓)标签TextView的点击技巧
  8. Android界面开发
  9. Android Handler机制4之Looper与Handler
  10. android Toast大全(五种情形)建立属于你自