首先说下为什么要用ArrayMap.java中的hashmap在初始化对象的时候便会分配16个大小的数组作为默认数组,无论你何时使用,若一个app中有特别多的hashmap用来存储少量数据的时候,就会造成特别多的内存浪费。因此出于此原因,google推出了ArrayMap这一数据结构作为移动端的用来存储键值对的轻量级的数据机构。首先我们在new对象的时候,并不会立即去申请存储空间除非你自己制定初始化空间。这样就能够在我们初始化了map之后并未使用时为系统节省空间。ArrayMap的第一次初始化是在我们往map中存放东西的时候,向系统申请一个BASE_SIZE个大小的数组也就是4个大小的数组。在这个类中存在一个10个数组的缓存池,当缓存池中有缓存时。在申请的时候会根据申请的大小,由这个缓存池中提取数组。ArrayMap中他有两个数组用来存储信息。一个用来存储key的hash值,另外一个用来存储键和值。存储键和值的数组大小始终为存储Key的hash值的两倍。put的时候先会采用二分法查找这个值的hash值的位置,如果找到的话就返回此hash值在数组中的下标,如果没找到就会返回此hash值应该存在的下标。然后根据返回值将键值对存入。伴随着存入元素的越来越多,当超过4个元素的时候,便会进行扩容操作。扩容的时候若扩容前的数组是4或者8个元素的时候,则在扩容的时候会将原数组进行回收,放进缓冲池中,具体的操作是将之前的缓存池放入到待回收数组的0号位置,将hash数组放到数组的一号位置,并将1号位置后的元素全部置空方便虚拟机GC,然后将这个数组置成缓存数组,完成回收对象的操作。这样便能够很好的利用对象的生命周期,避免不必要的GC,以及性能开销。

ArrayMap详解相关推荐

  1. java+getactionmap_Struts2 使用OGNL遍历map方法详解

    一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList; import java.util ...

  2. LOCAL_PRIVILEGED_MODULE 详解(4)

    2.3 packages.xml中的privateFlags字段 前文提到,packages.xml 这个文件位于ROM设备的 data/system,读取需要root权限.记录系统中所有安装的应用信 ...

  3. PackageManagerService启动详解(三)之开始初始化阶段流程分析

      PKMS启动详解(三)之BOOT_PROGRESS_PMS_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS ...

  4. 【胖虎的逆向之路】02——Android整体加壳原理详解实现

    [胖虎的逆向之路](02)--Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录 [胖虎的逆向之路](02)--Android整体加壳原理详解& ...

  5. Android Apk加壳技术实战详解

    前言 前几天面试了一家信息加密相关的公司,经过两轮面试原以为坐等HR,结果还有一个实践测试ORZ-面试这么多家公司,真心觉得这家公司很特殊,尤其是那个逻辑测试-算了,不扯远了,走回正题. 面试官加我Q ...

  6. Android四大组件之bindService源码实现详解

        Android四大组件之bindService源码实现详解 Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 Android四大组件之bindServic ...

  7. PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析

    PKMS启动详解(七)之BOOT_PROGRESS_PMS_SYSTEM_SCAN_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系 ...

  8. PackageManagerService启动详解(五)之Android包信息体和解析器(中)

        PKMS启动详解(五)之Android包信息体和包解析器(中) Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS启动详解(一)之 ...

  9. PackageManagerService启动详解(二)之怎么通过packages.xml对已安装应用信息进行持久化管理?

    PKMS启动详解(二)之怎么通过packages.xml对已安装应用信息进行持久化管理? Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKM ...

最新文章

  1. opencv判断 线夹角_opencv计算直线的斜率、截距,与水平线弧度值、角度值
  2. SAP WM LP10 创建TO单据的时候,系统根据目的地Storage Type 100下的库存自动扣减TO里的数量
  3. 提高 Java 代码质量
  4. 49、Power Query-合并查询温故知新
  5. 2018.4.23 数据结构
  6. Zookeeper-入门-安装
  7. C#实现Ping命令
  8. 其他计算机才能打印,关于HPM126A打印机共享问题-共享之后主机得打印一次后其他电脑才能打印...
  9. 计算机制图应用领域,计算机制图对测绘工程的应用
  10. 小学计算机小蘑菇教案,幼儿园中班小蘑菇教案.doc
  11. 图样图森破 设置虚拟机优先级真的很容易?
  12. 五步轻松搞定QGIS三维地形浏览
  13. Flutter 3.0 极光推送
  14. 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链...
  15. STM32读取SM300D2七合一传感器模块数据在0.96寸OLED显示,通过DL-LN3X无线模块显示在上位机
  16. matplotlib plot画图不弹框
  17. 巧用网络分析仪的校准
  18. 软件工程 系统测试概述
  19. 「万物生长」一个APK从诞生到活跃在Android手机上,android驱动开发权威指南pdf
  20. 【图像生成Metrics】快速计算FID、KID、IS、PPL

热门文章

  1. wow显示登录不上世界服务器,《魔兽世界怀旧服》世界服务器无法连接怎么解决 服务器无法连接解决方法一览...
  2. 鸿蒙安卓8,安卓VS鸿蒙第三方件切换宝典 V2.0(第一部分)
  3. 最全最详细的Java异常处理机制
  4. windows中freeRTOS模拟器环境搭建
  5. 微信小程序UI自动化测试实践:Minium+PageObject
  6. 教你如何快速关闭危险端口
  7. 极速体验docker容器健康
  8. SQLServer-日期-DATEDIFF 函数
  9. j-甜甜圈(第十三届icpc河南省赛)
  10. android 购物车数量加减,自定义View 购物车加减数量