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
原创粉丝点击