SparseArray
SparseArray、HashMap对比
- SparseArray采用时间换取空间的方式来提高手机App的运行效率
- HashMap通过空间换取时间,查找迅速;(HashMap中当table数组中内容达到总容量0.75时,则扩展为当前容量的两倍)
- 当小于某个数量临界点的时候,SparseArray的查询性能是优于 HashMap的,超过这个临界值SparseArray的查询性能是落后于 HashMap的;
- 使用int[]数组存放key,避免了HashMap中基本数据类型需要装箱的步骤,其次不使用额外的结构体(Entry),单个元素的存储成本下降。
使用方法
SparseArray<Student> sparseArray = new SparseArray<>();
SparseArray<Student> sparseArray = new SparseArray<>(capacity);
sparseArray.put(int key,Student value);
sparseArray.get(int key);
sparseArray.get(int key,Student valueIfNotFound);
sparseArray.remove(int key);
index
index就是SparseArray特有的属性了,SparseArray从名字上看就能猜到跟数组有关系,事实上他底层是两条数组,一组存放key,一组存放value,知道了这一点应该能猜到index的作用了。index 就是 key在数组中的位置
sparseArray.indexOfKey(int key);
sparseArray.indexOfValue(T value);
sparseArray.keyAt(int index);
sparseArray.valueAt(int index);
sparseArray.setValueAt(int index);
sparseArray.removeAt(int index);
sparseArray.removeAt(int index,int size);
实现原理
使用int[]数组存放key,避免了HashMap中基本数据类型需要装箱的步骤,其次不使用额外的结构体(Entry),单个元素的存储