您的位置:首页 > 移动开发 > Android开发

Android开发性能优化之SparseArray和HashMap

2013-05-06 18:07 495 查看
多数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
时候一样:

1

2


//从而在编译时就避免cast转换时的类型转换错误

List<String> list = new ArrayList<String>();


转自http://my.eoe.cn/appadventure/archive/2824.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: