赞
踩
代码中提示用SparseArray代替HashMap
SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的类,目的是提高内存效率,其核心是折半查找函数(binarySearch)。
注意内存二字很重要,因为它仅仅提高内存效率,而不是提高执行效率,只适用于android系统。
SparseArray系列有如下这些:SparseArray,SparseBooleanArray,SparseIntArray,SparseLongArray,LongSparseArray
适用:
SparseArray <int, Object>
LongSparseArray <long, Object>
SparseBooleanArray <int, boolean>
SparseIntArray <int, int>
SparseLongArray <int, long>
HashMap是数组和链表的结合体,被称为链表散列.
SparseArray是单纯数组的结合.被称为稀疏数组,对数据保存的时候,不会有额外的开销
稀疏数组的含义是:数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容
稀疏数组的结构:
SparseArray 的结构:
SparseArray 是对于稀疏数组的压缩表现。
从结构上可以看出,为什么SparseArray 占用内存更小。
HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置,存放的都是数组元素的引用,通过每个对象的hash值来映射对象。
SparseArray则是用数组数据结构来保存映射,然后通过折半查找来找到对象。
正序:
正序插入时SparseArray的效率要比HashMap的效率要高.并且占用的内存也比HashMap要小一些.
倒序:
SparseArray与HashMap无论是怎样进行插入,数据量相同时,前者都要比后者要省下一部分内存,但是效率在倒序插入的时候,SparseArray的插入时间和HashMap的插入时间远远不是一个数量级.由于SparseArray每次在插入的时候都要使用二分查找判断是否有相同的值被插入.因此这种倒序的情况是SparseArray效率最差的时候.
不需要将原始类型封装为对象类型,比如把int类型封装成Integer类型,结构比HashMap简单(SparseArray内部主要使用两个一维数组来保存数据,一个用来存key,一个用来存value)不需要额外的额外的数据结构
//声明 SparseArray<String> sparseArray= new SparseArray<>(); //增加元素,append方式 sparseArray.append(0, "myValue"); //增加元素,put方式 sparseArray.put(1, "myValue"); //删除元素,二者等同 sparseArray.remove(1); sparseArray.delete(1); //修改元素,put或者append相同的key值即可 sparseArray.put(1,"newValue"); sparseArray.append(1,"newValue"); //查找,遍历方式1 for(int i=0;i<sparseArray.size();i++){ Log.d(TAG,sparseArray.valueAt(i)); } //查找,遍历方式2 for(int i=0;i<sparseArray.size();i++){ int key = sparseArray.keyAt(i); Log.d(TAG,sparseArray.get(key)); }
http://hk.voidcc.com/question/p-adrxtshq-kw.html
https://www.itdaan.com/blog/2013/06/21/a0fe4643ea3645ff4bb55c0a893511bb.html
直接序列化传输数据上面两种都不可用,借住Bundle实现了数据传输,记录于此~
SparseArray浅析:https://blog.csdn.net/u013493809/article/details/21699121
SparseArray分析:https://blog.csdn.net/hq942845204/article/details/81293480
Android集合之SparseArray、ArrayMap详解:https://blog.csdn.net/hq942845204/article/details/81293480
Android学习笔记之性能优化SparseArray:https://www.cnblogs.com/RGogoing/p/5095168.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。