android的SparseArray
来源:互联网 发布:淘宝商家发快递多少钱 编辑:程序博客网 时间:2024/06/18 11:08
我们经常会使用到HashMap这个容器,它非常好用,但是却很占用内存。下图演示了HashMap的简要工作原理:
为了解决HashMap更占内存的弊端,Android提供了内存效率更高的ArrayMap。它内部使用两个数组进行工作,其中一个数组记录key hash过后的顺序列表,另外一个数组按key的顺序记录Key-Value值,如下图所示:
当你想获取某个value的时候,ArrayMap会计算输入key转换过后的hash值,然后对hash数组使用二分查找法寻找到对应的index,然后我们可以通过这个index在另外一个数组中直接访问到需要的键值对。如果在第二个数组键值对中的key和前面输入的查询key不一致,那么就认为是发生了碰撞冲突。为了解决这个问题,我们会以该key为中心点,分别上下展开,逐个去对比查找,直到找到匹配的值。如下图所示:
随着数组中的对象越来越多,查找访问单个对象的花费也会跟着增长,这是在内存占用与访问时间之间做权衡交换。
既然ArrayMap中的内存占用是连续不间断的,那么它是如何处理插入与删除操作的呢?请看下图所示,演示了Array的特性:
很明显,ArrayMap的插入与删除的效率是不够高的,但是如果数组的列表只是在一百这个数量级上,则完全不用担心这些插入与删除的效率问题。HashMap与ArrayMap之间的内存占用效率对比图如下:
与HashMap相比,ArrayMap在循环遍历的时候也更加简单高效,如下图所示:
前面演示了很多ArrayMap的优点,但并不是所有情况下都适合使用ArrayMap,我们应该在满足下面2个条件的时候才考虑使用ArrayMap:
- 对象个数的数量级最好是千以内
- 数据组织形式包含Map结构
原文链接:http://hukai.me/android-performance-patterns-season-3/
http://blog.csdn.net/xyz_fly/article/details/7931943
- Android SparseArray的用法
- android的SparseArray
- Android替代HashMap的SparseArray
- Android SparseArray
- Android平台的HashMap的替代品 SparseArray
- android SparseArray替代HashMap的分析
- Android 比ArrayMap更高效的SparseArray
- Android中SparseArray
- Android中SparseArray
- Android SparseArray替代HashMap
- SparseArray in Android
- Android -- SparseArray<E>详解
- Android SparseArray剖析
- Android缓存SparseArray使用
- Android--SparseArray替代HashMap
- Android SparseArray源码分析
- android SparseArray 源码分析
- Android 中的SparseArray
- Android——IPC机制(一)IPC概念以及Binder机制
- JAVA原生线程池的基本了解
- 一道有趣的逻辑题
- 使用Java8新增的Predicate操作集合
- xml转换成json
- android的SparseArray
- Linux_vmware-tools安装、设置文件夹共享(CentOS7)
- 欢迎使用CSDN-markdown编辑器
- dijkstra算法
- 常用控件含义,属性,继承关系
- mysql查询优化需要注意的20点
- Asp.Net Web应用程序无法拖放控件
- UVa11464-Even Parity
- 1109. Group Photo