所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容。
在Android开发中,当我们定义一个HashMap<Integer,Object>对象时,编译器会给我们如下提示:
我们再看下Android官方文档中关于SparseArray<E>的解释:
翻译过来就是:稀疏数组是用来将整型数映射到对象的数据结构。它不像一般的对象数组,可以有差距指数。它是用来更高效的进行整数和对象类型之间的映射。
其操作方法和HashMap基本类似,值得注意的是 它在存储时使用二分查找法进行存储,其插入源码如下:
- private static int binarySearch(int[] a, int start, int len, int key) {
- int high = start + len;
- int low = start - 1;
- while (high - low > 1) {
- int guess = (high + low) / 2;
- if (a[guess] < key) {
- low = guess;
- continue;
- }
- high = guess;
- }
- if (high == start + len)
- return start + len ^ 0xFFFFFFFF;
- if (a[high] == key) {
- return high;
- }
- return high ^ 0xFFFFFFFF;
- }
总结:此数据结构是经过Android重写过,建议大家在Android开发中如遇到HashMap<Integer,Object>数据结构时,采用此数据结构进行开发。