Android中SparseArray解析
来源:互联网 发布:jsp页面连接数据库 编辑:程序博客网 时间:2024/06/05 05:49
SparseArray
在Android为替代HashMap而产生的,SparseArray是Android里为<Interger,Object>这样的Hashmap而专门写的类,目的是提高内存效率,其核心是折半查找函数(binarySearch)。注意内存二字很重要,因为它仅仅提高内存效率,而不是提高执行效率,所以也决定它只适用于Android系统(内存对android项目有多重要,地球人都知道)。SparseArray有两个优点:1.避免了自动装箱(auto-boxing),2.数据结构不会依赖于外部对象映射。我们知道HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置,存放的都是数组元素的引用,通过每个对象的hash值来映射对象。而SparseArray则是用数组数据结构来保存映射,然后通过折半查找来找到对象。但其实一般来说,SparseArray执行效率比HashMap要慢一点,因为查找需要折半查找,而添加删除则需要在数组中执行,而HashMap都是通过外部映射。但相对来说影响不大,最主要是SparseArray不需要开辟内存空间来额外存储外部映射,从而节省内存。
看看源码中SparseArray中的方法:
对于修改数据起初以为只有setValueAt(int index, E value)可以修改数据,但后来发现put(int key, E value)也可以修改数据,我们查看put(int key, E value)的源码可知,在put数据之前,会先查找要put的数据是否已经存在,如果存在就是修改,不存在就添加,这倒是感觉跟HashMap很像。
其中get(int key)也只是调用了 get(int key,E valueIfKeyNotFound),最后一个从传参的变量名就能看出,传入的是找不到的时候返回的值.get(int key)当找不到的时候,默认返回null
对应valueAt(int)方法,查看键所在位置,由于是采用二分法查找键的位置,所以找不到时返回小于0的数值,而不是返回-1。返回的负值是表示它在找不到时所在的位置
发现其核心就是折半查找函数(binarySearch),~\(≧▽≦)/~赞:
相应的也有SparseBooleanArray,用来取代HashMap<Integer, Boolean>,SparseIntArray用来取代HashMap<Integer, Integer>
具体感兴趣可以继续深入了解...
- Android中SparseArray解析
- android sparseArray源码解析
- Android SparseArray 源码解析
- Android中SparseArray
- Android中SparseArray
- Android中SparseArray源码实现
- SparseArray解析
- android sparseArray源码解析,比较hashmap
- android中使用SparseArray代替HashMap
- android中SparseArray和ArrayMap代替HashMap
- Android SparseArray
- Android内存优化之取代HashMap(SparseArray和ArrayMap解析)
- SparseArray源码解析
- SparseArray源码解析
- SparseArray 源码解析
- Android中SparseArray一个写的很人性化的地方
- Android中使用SparseArray替代HashMap提高性能
- Android开发中高效的数据结构用SparseArray代替HashMap
- 各大网站CSS初始化代码
- Eureka报异常Cannot execute request on any known server
- 数据结构实验之查找四:二分查找
- 使用 android 系统提供的 app 打开对应文件
- 初学opencv/形态学拐角检测
- Android中SparseArray解析
- Web移动端Fixed布局的解决方案
- 【运维平台系列】关于弹性扩缩容操作的细节
- C++ String 简单总结
- ROS会议 ROSCon 2017
- CSS3动画特效
- synchronize用法
- zookeeper的linux安装
- libevent学习笔记