Android应用性能优化之使用SparseArray替代HashMap

HashMap是java里比較经常使用的一个集合类,我比較习惯用来缓存一些处理后的结果。近期在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performance 警告。


意 思就是说用SparseArray<E>来替代,以获取更好性能。老实说,对SparseArray并不熟悉,第一感觉应该是Android 提供的一个类。按住Ctrl点击进入SparseArray的源代码。果不其然。确定是Android提供的一个工具类。

单纯从字面上来理解。SparseArray指的是稀疏数组(Sparse array)。所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费。为了节省内存空间,而且不影响数组中原有的内容值,我们能够採用一种压缩的方式来表示稀疏数组的内容。

如果有一个9*7的数组,其内容例如以下:

 

 

在此数组中,共同拥有63个空间,但却仅仅使用了5个元素。造成58个元素空间的浪费。下面我们就使用稀疏数组又一次来定义这个数组:

 

当中在稀疏数组中第一部分所记录的是原数组的列数和行数以及元素使用的个数、第二部分所记录的是原数组中元素的位置和内容。

经过压缩之后,原来须要声明大小为63的数组,而使用压缩后,仅仅须要声明大小为6*3的数组,仅需18个存储空间。

 

继续阅读SparseArray的源代码,从构造方法我们能够看出,它和一般的List一样,能够预先设置容器大小,默认的大小是10: