摘要:
1,SparseArray的介绍
2,SparseArray的代码实现
1,SparseArray的介绍
前面我们讲过《ArrayMap》,用它来实现哈希表,其中存放key和value的数组长度是存放散列表数组长度的二倍。
在哈希表中如果key值是 int 类型,我们可以直接用它当做散列值,这样就不需要在单独存储key值了,这个时候两个数组的长度就一样了,这种存储方式就是SparseArray,也叫稀疏数组。
SparseArray和ArrayMap的实现原理是一样的,只不过SparseArray的key和散列值都是同一个,根据这个特性我们也可以得出SparseArray中是不会存在哈希冲突的,因为在SparseArray中key值就是散列值,散列值也就是key值。
SparseArray中存放key的数组也是有序的,查找的时候通过二分查找,因为SparseArray不存在散列冲突,所以如果找到就表示存在,没找到就表示不存在,不需要再根据key值往两边继续查找。
2,SparseArray的代码实现
SparseArray的代码可以参照ArrayMap,不过这里我们可以做一个优化,就是在删除的时候不需要直接删除,而是把它标记为无效的元素。这样一个很大的优点就是不需要移动后面的元素。
如果插入的时候,当前位置是无效的数据,可以直接覆盖,不需要在移动后面的数据。