性能优化:更高效的 ArrayMap
来源:互联网 发布:安卓智能网络机顶盒 编辑:程序博客网 时间:2024/05/16 04:38
1) Fun with ArrayMaps
程序内存的管理是否合理高效对应用的性能有着很大的影响,有的时候对容器的使用不当也会导致内存管理效率低下。Android为移动操作系统特意编写了一些更加高效的容器,例如SparseArray,今天要介绍的是一个新的容器,叫做ArrayMap。
我们经常会使用到HashMap这个容器,它非常好用,但是却很占用内存。下图演示了HashMap的简要工作原理:
为了解决HashMap更占内存的弊端,Android提供了内存效率更高的ArrayMap。它内部使用两个数组进行工作,其中一个数组记录key hash过后的顺序列表,另外一个数组按key的顺序记录Key-Value值,如下图所示:
当你想获取某个value的时候,ArrayMap会计算输入key转换过后的hash值,然后对hash数组使用二分查找法寻找到对应的index,然后我们可以通过这个index在另外一个数组中直接访问到需要的键值对。如果在第二个数组键值对中的key和前面输入的查询key不一致,那么就认为是发生了碰撞冲突。为了解决这个问题,我们会以该key为中心点,分别上下展开,逐个去对比查找,直到找到匹配的值。如下图所示:
随着数组中的对象越来越多,查找访问单个对象的花费也会跟着增长,这是在内存占用与访问时间之间做权衡交换。
既然ArrayMap中的内存占用是连续不间断的,那么它是如何处理插入与删除操作的呢?请看下图所示,演示了Array的特性:
很明显,ArrayMap的插入与删除的效率是不够高的,但是如果数组的列表只是在一百这个数量级上,则完全不用担心这些插入与删除的效率问题。HashMap与ArrayMap之间的内存占用效率对比图如下:
与HashMap相比,ArrayMap在循环遍历的时候也更加简单高效,如下图所示:
前面演示了很多ArrayMap的优点,但并不是所有情况下都适合使用ArrayMap,我们应该在满足下面2个条件的时候才考虑使用ArrayMap:
- 对象个数的数量级最好是千以内;
- 数据组织形式包含Map结构。
我们需要学会在特定情形下选择相对更加高效的实现方式。
- 性能优化:更高效的 ArrayMap
- Android 比ArrayMap更高效的SparseArray
- android性能优化SparseArray和ArrayMap
- Android性能优化之SparseArray与ArrayMap
- MaxCompute2.0性能评测:更强大、更高效之上的更快速
- MaxCompute2.0性能评测:更强大、更高效之上的更快速
- Android性能优化-使用SparseArray|ArrayMap替代HashMap
- 安卓性能优化—使用ArrayMap与SparseArray
- Android性能优化三 ArrayMap 自动装箱 预取数据
- 性能优化:使用SparseArray和ArrayMap代替HashMap
- android中你所不知道的高效的ArrayMap
- php 代码优化,编写更高效的代码
- Android内存优化-使用更高效的容器
- Android内存优化:ArrayMap
- Android优化之ArrayMap
- 让Android UI性能更高效
- Android SparseArray与HashMap与ArrayMap的性能差别
- oracle性能优化技巧:max(),min()的高效写法
- Android调试错误
- Android 第一行代码(第二版)学习笔记
- 团体程序设计天梯赛L1-019谁先倒
- 【C#】AddHandler可重复多次添加事件处理器的问题
- CHM帮助文档打开为空白的解决办法
- 性能优化:更高效的 ArrayMap
- Spring NamedParameterJdbcTemplate完成数据的增删改查
- 诚汇通进军“三农”金融 助力“三农”融资渠道拓宽
- Linux进程调度原理
- 《ACM程序设计》 Q题
- js知识点总结
- jsp 翻页代码
- 通过pycharm的database设置进行数据库的可视化
- HTML详解