ArrayMap源码阅读
来源:互联网 发布:劲舞淘宝商城 编辑:程序博客网 时间:2024/06/05 17:24
Android源码中的一个Map(实现的Map接口),号称能够比hashmap更省内存。因为hashmap是链式地址解决冲突,但是有一个叫entry的类,占了一定空间。key value也是用对象来表示的。
有一个很重要的是,arraymap根本不是哈希表,hash值只是个标记,这根本就是一个二叉查找树。有两个数组:key值数组,与对象数组的下标对应,key值可重复,且有序排列;对象数组,存储真正的键值对,偶数下标是key,奇数是value。
0.为了快速扩展数组空间,使用了static的array cache。结构是[[[...], int[]], int[]]。cache[0]指向下一个数组,cache[1]是被缓存的数组。
1.搜索使用ContainerHelpers中的二分搜索,并对有相同hash值的前后对象进行比较。
2.clear归还了内存,erase只是清空内容。
大Google的猿确实思考的要多一些,很注意细节,把一干class和对象省掉了,代价就是代码可读性大降。其实,很多时候,对象的数组可以用多个filed的数组来实现,这是这个实现方法的基本原理吧。
官方视频
摘要:
0. 100量级的数据,ArrayMap性能不会差太多
1. 数据很少时,ArrayMap仅占用O(数据量)的数据量,HashMap的entry array大小不会改变,占用空间
2. ArrayMap可以使用index遍历,会快一些
0 0
- ArrayMap源码阅读
- Android ArrayMap源码详解
- ArrayMap源码分析
- 【内存优化】ArrayMap源码解析
- ArrayMap与SparseArray源码分析
- 面试必备:ArrayMap源码解析
- 面试必备:ArrayMap源码解析
- ArrayMap
- SparseArray和ArrayMap相关源码解析
- HashMap,ArrayMap,SparseArray源码分析及性能对比
- 阅读源码
- 阅读源码
- 阅读源码
- 源码阅读
- JUnit源码阅读 -- 阅读基础
- ArrayMAP介绍
- HashMap/ArrayMap
- Android探索之旅(第十二篇)HashMap,ArrayMap,SparseArray源码分析及性能对比
- 外网和内网远程登录mysql和postgresql
- 安卓学习笔记(七)一些小错误的解决方法——安卓第四天
- 笔记-C#字符的类型
- 局域网游戏的原理
- acm-UVA10300(水题,纯粹考英语)
- ArrayMap源码阅读
- 机器学习实战笔记2(k-近邻算法)
- 【LeetCood】Roman to Integer
- http://movie.douban.com/doulist/4363832/
- word2vec 中的数学原理详解(三)背景知识
- 数学之路-python计算实战(16)-机器视觉-滤波去噪(邻域平均法滤波)
- C#三种循环终止方式
- 虚函数实现原理
- Options That Control Optimization