android.util.ArrayMap 解读

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只是清空内容。


ArrayMap 由一个ArrayList后推得到的Map。对反复的顺序提供了精确的控制。面向非常小的Map设计,特别是那些需要经常创建和删除的。对于非常小的Map,创建和反复所付出的代价要比HashMap低得多。但在Map变大以后,性能也会相应地大幅度降低。

你可能感兴趣的:(android)