前言:数据结构&算法选型 概述:
这里我们介绍数据结构和算法对性能的影响。
Java语言和Android源码里面有很多现成的轮子,我们在使用这些数据结构的时候,要知其所以然,从源码分析这些数据结构的原理和特点,选取最适合的拿来用。
1.使用SparseArray、ArrayMap代替HashMap
SparseArray指的是稀疏数组(Sparse array),所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容。
google推荐使用其代替HashMap, 其内部实现了压缩算法,可以进行矩阵压缩,大大减少了存储空间,节约内存。此外它的查找算法是二分法,提高了查找的效率。
数据量小于1000时,使用ArrayMap可以避免HashMap内存翻倍的问题,以int为key的HashMap可以用SparseArray代替,缺点是乱序查找添加删除效率不如HashMap
ArrayMap的使用并不能提升反应时间,却能够节省内存空间,当数据量很大时,使用ArrayMap,以时间换空间,防止出现OOM。Bundle实现使用了ArrayMap。
ArrayMap与HashMap有四点不同
a.储存方式不同
ArrayMap储存数据和HashMap不同,它没有Entry这个东西,而是用数组来保存数据
b.扩容操作不同
HashMap容量不足时,会新建double容量table返回,而ArrayMap采用copy方式,并且