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变大以后,性能也会相应地大幅度降低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值