ArrayMap是什么
key-value键值映射的数据结构,相比HashMap内存空间占用更少(内存管理效率高);
Android提供了内存效率更高的ArrayMap,解决HashMap更占内存的弊端;
**ArrayMap是Android专门针对内存优化而设计的,用于取代Java API中的HashMap数据结构。为了更进一步优化key是int类型的Map,Android再次提供效率更高的数据结构SparseArray,可避免自动装箱过程。对于key为其他类型则可使用ArrayMap。**HashMap的查找和插入时间复杂度为O(1)的代价是牺牲大量的内存来实现的,而SparseArray和ArrayMap性能略逊于HashMap,但更节省内存。
ArrayMap的实现原理
内部使用两个数组,一个数组记录key hash过后的顺序列表,另一个数组按key的顺序记录Key-Value值,源码成员变量如下图所示:
这样做的好处就是它避免了为每个加入到map的实体构造额外的对象。在ArrayMap大小增长的时候,我们也只需要复制两个数组的实体,而不需要重新构建一个hash map。
需要注意的是这种数据结构不适合包含大量数据项的数据结构,因为它内部使用的是数组,对数组进行插入和删除操作效率比较低。
参考文章
https://developer.android.com/reference/android/util/ArrayMap
http://gityuan.com/2019/01/13/arraymap/