Android中中SparseArray性能优化的使用方法性能优化的使用方法
之前一篇文章研究完横向二级菜单横向二级菜单,发现其中使用了SparseArray去替换HashMap的使用.于是乎自己查了一些相关资料,自己
同时对性能进行了一些测试。首先先说一下SparseArray的原理.
SparseArray(稀疏数组).他是Android内部特有的api,标准的jdk是没有这个类的.在Android内部用来替代HashMap<Integer,E>
这种形式,使用SparseArray更加节省内存空间的使用,SparseArray也是以key和value对数据进行保存的.使用的时候只需要指定
value的类型即可.并且key不需要封装成对象类型.
楼主根据亲测,SparseArray存储数据占用的内存空间确实比HashMap要小一些.一会放出测试的数据在进行分析。我们首先看
一下二者的结构特性.
HashMap是数组和链表的结合体是数组和链表的结合体,被称为链表散列被称为链表散列.
SparseArray是单纯数组的结合是单纯数组的结合.被称为稀疏数组,对数据保存的时候,不会有额外的开销.结构如下:
这就是二者的结构,我们需要看一下二者到底有什么差异…
首先是插入:
HashMap的正序插入:
HashMap<Integer, String>map = new HashMap<Integer, String>();
long start_map = System.currentTimeMillis();
for(int i=0;i<MAX;i++){
map.put(i, String.valueOf(i));
}
long map_memory = Runtime.getRuntime().totalMemory();
long end_map = System.currentTimeMillis()-start_map;
System.out.println("<---Map的插入时间--->"+end_map+"<---Map占用的内存--->"+map_memory);
执行后的结果:
<---Map的插入时间--->914
<---Map占用的内存--->28598272
SparseArray的正序插入:
SparseArray<String>sparse = new SparseArray<String>();
long start_sparse = System.currentTimeMillis();
for(int i=0;i<MAX;i++){
sparse.put(i, String.valueOf(i));
}