Android 开发性能优化之SparseArray(一)
多数Android开发者都知道在Android中可以使用HashMap
来映射一种对应关系,在java开发中HashMap
也算是一种很重要的数据存储结构。然后很多人在Android开发中多数都会用HashMap
来存储这种映射形式的数据。
其实,Android提供了一种更加适合Android开发的数据结构——SparseArray
。初看之下,好像是一种数组,其实不然。数组的index是连续的。而SparseArray
可以不连续,所以导致SparseArray
就具有HashMap
的一些特性,但是比HashMap
的性能要好。既然性能要好很多,那是不是所有可以用HashMap
的地方都可以用SparseArray
代替呢?也不尽然。SparseArray
的value可以是任意类型,但它的key只能是Integer
类型。
所以如果你的项目中key就是需要Integer
,那么 go ahead,make yourself comfortable.而如果你的需要是key是String
,那你老老实实用HashMap
就好了。
也许你会问:我的key是Integer
、value是Boolean
类型的,也适合SparseArray
吗?当然,不过如果这真是你的情况的话,还有更好的推荐——SparseBooleanArray
,可以说这个类是专门为你这个需求而生的:key是Integer
,value是Boolean
类型。
除此之外,Android还为我们提供了SparseIntArray
,我相信看名字你也能猜出这个与SparseBooleanArray
的区别是什么。没错,这个适合Integer
与Integer
的映射。
说到这里,你可能会说,我的key的值一般比较大,可能Integer
这种数据类型无法表示过来。OK,Android也知道你会这么说,ta-da! LongSparseArray
在这里就等你去使用它。
2013-4-21 0:31 更新:SparseBooleanArray
特别适合的一种场景:ListView
每一项如果有Checkbox
控件的话,你会用什么数据结构保存是否选中这种状态。没错,SparseBooleanArray
非常适合
2013-5-2 2:56 更新:由于SparseArray
属于泛型类,所以使用的时候最好能指定类型参数。就想你使用ArrayList
时候一样:
//从而在编译时就避免cast转换时的类型转换错误
List<String> list = new ArrayList<String>();
本文转载自:http://my.eoe.cn/appadventure/archive/2824.html
Android 开发性能优化之SparseArray(一)的更多相关文章
- Android 开发性能优化之SparseArray(三)
SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch) pr ...
- Android 开发性能优化之SparseArray(二)
一.SparseIntArray API SparseIntArrays map integers to integers. Unlike a normal array of integers, t ...
- Android开发性能优化总结(一)
安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...
- (转) Android开发性能优化简介
作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...
- [素材资源] Android开发性能优化简介(非常不错的)
转自(http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost& ...
- Android开发性能优化大总结
1. 采用硬件加速,在androidmanifest.xml中application添加android:hardwareAccelerated="true".不过这个需要在and ...
- Android开发性能优化大总结(二)
接上篇: 1.在JAVA+Oracle 的应用系统开发中,Java中内嵌的sql语句尽量使用大写的形式,以减少Oracle解析器的解析负担: 2.由于JVM的有其自身的GC机制,但是也有遗漏的隐患,建 ...
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
随机推荐
- 基于Jquery的banner轮播插件,简单粗暴
新手练习封装插件,觉着在前端这一块的轮播比较多,各种旋转木马一类的3D旋转,技术不够,所以封装了一个简单的banner轮播插件,功能也比较简单,就是左右向的轮播. 先挂地址https://github ...
- 不同的extend 在调用构造函数时不同的写法
/** * jQuery.hhNewSilder 滚动图片插件 * User: huanhuan * QQ: 651471385 * Email: th.wanghuan@gmail.com ...
- Delphi中判断WebBrowser的页面是否加载完成
方法一: 在WebBrowser的OnDocumentComplete事件书写代码. 方法二: WebBrowser1.Navigate(Url); while WebBrowser1.Busy or ...
- Python守护进程(多线程开发)
本段代码主要作用是httpsqs队列的消费端守护进程,从httpsqs中取出数据,放入mongodb #!/usr/bin/python import sys,time,json,logging im ...
- Oracle的rowid结构解析
SQL> select rowid,deptno from dept; ROWID DEPTNO ------------------ ---------- A ...
- Python之创建tuple
tuple是另一种有序的列表,中文翻译为" 元组 ".tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了. 同样是表示班里同学的名称,用tuple表示如 ...
- 我的PHP之旅--数组的认识(初级)
数组 PHP的数组与swift有些许不同,分为3类(初级,以后会涉及到多维数组和数组指针等). 枚举数组 关联数组 混合数组 枚举数组 枚举数组跟swift中的数组差不多: <?php $arr ...
- Css3 圆角和渐变色问题(IE9)
border-radius: 4px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#569B0E', endC ...
- 用JAVA实现数字水印(可见)
数字水印有可见不可见之分,可见的比如课件上印有学校校徽,微博发图片会水印上上传者的信息及微博logo等. 用java实现可见的数字水印,草人主要是用到了java.awt包中的AlphaComposit ...
- C#变成数据导入Excel和导出Excel
excel 基础 •整个excel 表格叫工作表:workbook:工作表包含的叫页:sheet:行:row:单元格:cell. •excel 中的电话号码问题,看起来像数字的字符串以半角单引号开头就 ...