一、内部结构
二、原理
数据结构2个数组,一个存key的hash值 ,一个存key和value的值。
Get操作
-> 通过key值得到hash值 -> 通过2分查找求出index (数据量大 效率降低原因之一)
-> key = Arrays[2*index] value = Arrays[2*index +1]
Put操作
-> 找到index , 如果index没找到 返回~index值
-> 扩容 1.5倍 (<4时 4个,>4&&<8 8个)
三、对比hashMap优缺点
不同点
1、ArrayMap采用的数据结构是两个一维数组,而HashMap使用的是一维数组和单链表数据结构
2、ArrayMap默认容量为0,而HashMap默认容量是16。
3、ArrayMap没有最大容量的限制,直到报oom,而HashMap最大容量最大是Integer.MAX_VALUE
4、ArrayMap默认每次扩容时原来容量一半的增量(大于4小于8时申请8个,小于4时申请4个),而HashMap默认每次扩容时原来容量2倍的增量
优点:
1、相比HashMap内存空间更优,因为比HashMap少了一个实体类进行装饰
2、容量为4或者8时又缓存复用功能
3、扩容比HashMap高效,因为HashMap扩容时相当于重构,需要重新重新计算hash值和移动元素;而ArrayMap扩容时只需拷贝
缺点:
1、数据量大的情况下查询效率比HashMap差
2、存取效率比HashMap低,因为每次存取都需要二分法找到对应的下标
3、没有实现Serializable,不便在Android bundle进行传输
四、使用场景
1、数据量小,建议百量级别
2、内存要求高
参考:https://www.jianshu.com/p/1a14fc87b935