ArrayMap是什么

key-value键值映射的数据结构,相比HashMap内存空间占用更少(内存管理效率高);

Android提供了内存效率更高的ArrayMap,解决HashMap更占内存的弊端;

**ArrayMap是Android专门针对内存优化而设计的,用于取代Java API中的HashMap数据结构。为了更进一步优化key是int类型的Map,Android再次提供效率更高的数据结构SparseArray,可避免自动装箱过程。对于key为其他类型则可使用ArrayMap。**HashMap的查找和插入时间复杂度为O(1)的代价是牺牲大量的内存来实现的,而SparseArray和ArrayMap性能略逊于HashMap,但更节省内存。

ArrayMap的实现原理

内部使用两个数组,一个数组记录key hash过后的顺序列表,另一个数组按key的顺序记录Key-Value值,源码成员变量如下图所示:

public final class ArrayMap<K, V> implements Map<K, V> {private static final boolean CONCURRENT_MODIFICATION_EXCEPTIONS = true;private static final int BASE_SIZE = 4;  // 容量增量的最小值private static final int CACHE_SIZE = 10; // 缓存数组的上限static Object[] mBaseCache; //用于缓存大小为4的ArrayMapstatic int mBaseCacheSize;static Object[] mTwiceBaseCache; //用于缓存大小为8的ArrayMapstatic int mTwiceBaseCacheSize;final boolean mIdentityHashCode;int[] mHashes;         //由key的hashcode所组成的数组Object[] mArray;       //由key-value对所组成的数组,是mHashes大小的2倍int mSize;             //成员变量的个数
}

这样做的好处就是它避免了为每个加入到map的实体构造额外的对象。在ArrayMap大小增长的时候,我们也只需要复制两个数组的实体,而不需要重新构建一个hash map。

需要注意的是这种数据结构不适合包含大量数据项的数据结构,因为它内部使用的是数组,对数组进行插入和删除操作效率比较低。

参考文章

https://developer.android.com/reference/android/util/ArrayMap

http://gityuan.com/2019/01/13/arraymap/

ArrayMap浅记相关推荐

  1. 拾人牙慧,浅记一些C++的类

    这两天没事又翻了翻Primer,发现自己上岁数了,记单词能力开始下降,索引把一些简单的例子记下来,把一些肥肉剔除,剩一下骨头,方便今后Ctrl+F.  在此感谢:   http://ticktick. ...

  2. Java-Jvm-07-深入浅出Jvm浅记

    文章目录 1. 走近Java 1.1 概述 1.2 Java的技术体系 1.3 Java的发展史 1.4 Java虚拟机家族 1.4.1 虚拟机始祖:Sun Classic/Exact VM 1.4. ...

  3. 【 FPGA 】时钟抖动浅记

    时钟抖动是指芯片的某一个给定点上时钟周期发生暂时的变化,即相邻两个时钟周期之间存在差值.这个误差是时钟发生器内部产生的,和晶振或者PLL内部电路有关,时钟信号传播过程中的噪声对其也有影响. 时钟抖动有 ...

  4. FPGA图像处理 浅浅浅浅浅记

    FPGA因其并行处理数据.高速和可编程等特性在图像处理方面得到广泛应用,特别是在简单算法的时候,即图像处理的预处理时,可以通过一些FPGA开发公司所配置的软件进行对算法的实现. Vivado的一个工具 ...

  5. 浅记项目管理交付标准

    项目中最大的风险是什么呢? --我认为是偏离了项目最初的目标. 软件产品开发 项目通常有三种比较常见的目标: 在规定的时间上市(时间) 实现全部的功能特性(范围) 提供低缺陷.高质量的产品(质量) 项 ...

  6. 【浅记CTF(一)】复习周来袭

    文章目录 前言: [WEB]sql_checkin [杂项]easy_misc 莫斯密码解密 lsb加密隐写 栅栏密码 [杂项]Un(ix)zip unixzip Base64 [杂项]Do_you_ ...

  7. RabbitMQ(消息队列)浅记

    消息队列 PS:大二下学习RabbitMQ的随手小记 一.什么是 MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而 ...

  8. 浅记《网络科学导论》知识点

    教材<网络科学导论> 汪小帆 李翔 陈关荣 学习目标 了解社交网络与复杂网络的基本概念 了解可以使用的复杂网络分析来做什么 了解基本度量方法-评价体系 使用Gephi等工具获得动态网络分析 ...

  9. 【JVM】浅记JVM

    前言 一.参看视频.网站.书籍 差不多是花了一个月看完黑马的视频,然后查看其它的相关的面试题.差不多花费的时间就是一个半月吧. ① 黑马程序员JVM完整教程,Java虚拟机快速入门, 附上黑马视频自带 ...

最新文章

  1. SAP Fiori Elements - how is sap-label annotation inserted to odata request
  2. 问题集锦13:数据库升级后,程序无法连接数据库
  3. ssm read time out的原因_加盟蜜雪冰城未通过是什么原因?总部公布了两点原因
  4. 虎牙AI基础技术部招聘深度学习/计算机视觉实习生
  5. 父亲节,程序员几条代码硬核示爱
  6. git远程删除分支后,本地git branch -a 依然能看到的解决办法
  7. 2.2创建Spring数据REST服务
  8. 【事件驱动】【数码管识别】 一台电脑能接多少台USB设备
  9. 编程基本功:工作中,高低境界如何迁就?
  10. svn server配置与TortoiseSVN、Ankhsvn+VS使用
  11. 采用计算机发布调度命令时 必须严格遵守,调度命令规范格式(公文命令).doc...
  12. 博弈论笔记(0)—— 参考书籍及前置知识
  13. Delphi 10.4.1 游戏开发引擎unDelphiX
  14. 国际网页短信平台搭建|后台定制-移讯云短信系统
  15. 虚幻引擎 4 渲染流程分析
  16. 渗透测试之信息收集总结
  17. 未来已来让闲置回归价值
  18. 企业微信消息推送(一)接收消息服务器URL
  19. 专访丨兼容国内外市场的代码分析软件,鉴释科技帮助企业减少bug发生率
  20. 离散数学与计算机专业的关系是什么,离散数学跟计算机专业有什么关系?

热门文章

  1. 中秋快乐!旷视喊你来淘宝造物节凹最炫的AI造型
  2. 算法刷刷刷|二叉树篇|二叉树的遍历
  3. Unity 代码动态生成模型
  4. 基于vue+element-ui实现上传进度条
  5. UI设计师未来职业发展前景大揭秘
  6. 组合小工具微信小程序
  7. lmx2592频率源原理图和程序源码
  8. MySQL8_基础_聚合函数
  9. centos8配置网络
  10. 微软动画指针漏洞(ANI漏洞,艾妮)