Android SparseArray

Sparse array —稀疏数组 原型解释:http://hi.baidu.com/kxw102/item/9302f36ef2b9db106995e639" 所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容。 人性化的SparseArray:http://blog.sina.com.cn/s/blog_68d72c9b010131ug.html SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch),今天在看这个class的实现时发现一个很好的设计: public void remove(int key) { delete(key); } remove和delete都实现了,功能当然是一样的,对用户来说,想用delete,和remove的都可以。 SparseArray<E>详解:http://blog.csdn.net/xyz_fly/article/details/7931943 最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray<E>来代替会有更好性能。 那我们就来看看源码中SparseArray到底做了哪些事情: 一、构造 从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10: public SparseArray() { this(10); } public SparseArray(int initialCapacity) { ...... } 二、增 它有两个方法可以添加键值对: public void put(int key, E value) public void append(int key, E value) 在存储数据的时候,是采用了二分法方式,以下是它采用二分法的源码: 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; } 所以,它存储的数值都是按键值从小到大的顺序排列好的。...

九月 15, 2012