android独有的省内存的轻量级容器类
来源:互联网 发布:js window监听事件 编辑:程序博客网 时间:2024/05/16 07:44
在android中, 如果可能, 请优先考虑SparseArray族(稀疏数组)代替HashMap:
SparseArray HashMap<Integer, Object>
SparseBooleanArray HashMap<Integer, Boolean>
SparseIntArray HashMap<Integer, Integer>
SparseLongArray HashMap<Integer, Long>
给出的优点: 比HashMap省很多内存; 没有装箱拆箱; 与equals()和hashCode()无关; 对于小容量情况(小于1000), 速度与HashMap相差不大;
不过可能的缺点: 不工作在非android项目上; 速度比HashMap慢(SparseArray使用两个数组, 其添加、查找、删除数据都需要先进行一次二分查找), 不适合大容量的情况; 当然你也可以尝试trove.jar;
在android中, 如果可能, 请优先考虑ArrayMap/ArraySet代替HashMap/HashSet:
1. ArraySet不是由ArrayMap实现(HashSet是由HashMap实现), 整体上ArraySet/ArrayMap比HashSet/HashMap轻量级的多;
2. 将Key的hash存在一个int[]数组里, 表明Key的唯一性, 而不是用作hash查找算法, 将Key/Value都存在Object[]类型的数组里, 如果Key存在索引i上, 则Value存在i+1的位置上, 使用二分查找在int[]中找到对应hash所在的index, 然后由index映射到对应Object[]的某个索引位置, 进而得到Key/Value;
3. 为了KeySet, 有必要在Object[]中存储Key;
4. ArrayMap/ArraySet会更积极地控制底层数组的大小增长, 因为它只要求复制数组条目, 而不是像HashMap/HashSet那样重建一个哈希映射;
5. 和SparseArray族一样, 比HashMap/HashSet更省内存, 但在大容量情况, 速度比HashMap/HashSet慢, 其中一个原因是为了节省内存, ArrayMap/ArraySet可能在删除操作时, 压缩底层数组, HashMap/HashSet取胜的另一个关键是hash查找算法比二分查找高效, 但前提是一个好的hash算法函数和一个大的容器空间以减少hash碰撞;
6. 如果你不需要Java类库里的标准容器API(比如迭代器等), 可以考虑使用支持库里的SimpleArrayMap, 后者没有实现java.util.Map接口;
注: 对于大容量的情况, 请务必关注构造器capacity的设置, 它对性能的影响至关重要;
- android独有的省内存的轻量级容器类
- [Android]最省内存的ViewPager添加小圆点指示器
- [Android]最省内存的ViewPager添加小圆点指示器
- Android高效内存之让你的图片省内存
- Android以最省内存的方式读取本地资源的方法
- [代码片段] 【转】Android以最省内存的方式读取本地资源的
- Android以最省内存的方式读取本地资源的
- Android以最省内存的方式读取本地资源的方法
- Android以最省内存的方式读取本地资源的方法
- Android以最省内存的方式读取本地资源的方法
- 交通灯实例的实现方式一 省内存版
- paip.最省内存的浏览器评测 cah
- 一种比较省内存的稀疏矩阵Python存储方案
- 轻量级容器的比较
- 轻量级容器的比较
- Android独有的序列化Parcelable
- android开发进阶----how to省内存
- android 图片最省内存压缩方法
- C#中冒泡排序和比较排序
- 启动tomcat报,这个怎么弄啊,我这包不冲突
- Softmax回归原理简介
- 跟着项目学javaweb(std):3(走进后台)
- java笔试题(二)
- android独有的省内存的轻量级容器类
- 有向无环中的单源最短路径问题
- iOS中数组与字符串的相互转换
- $result = curl_exec($ch);
- softmax回归
- C++:<sstream>头文件的应用
- pack布局
- iOS 视图控制器转场详解
- ONU